Я использую Google Place API, который имеет запрос в секунду предел 10 . Это означает, что я не могу сделать более 10 запросов в течение секунды. Если бы мы использовали последовательное выполнение, это не было бы проблемой, так как время отклика API AVG составляет 250 мс, поэтому я смогу сделать всего 4 вызовов за секунду.
Использовать весь предел 10 QPS я использовал MultiThreading и выполнил Parallel API. Но теперь мне нужно контролировать количество вызовов, которые могут произойти через секунду, оно не должно выходить за рамки 10 < /strong> (Google API начинает бросать ошибки, если я пересекаю предел) < /p>
Ниже приведен код, который я имею до сих пор, я не могу выяснить, почему программа просто застряла или требует дольше, чем необходимо.import time
from datetime import datetime
import random
from threading import Lock
from concurrent.futures import ThreadPoolExecutor as pool
import concurrent.futures
import requests
import matplotlib.pyplot as plt
from statistics import mean
from ratelimiter import RateLimiter
def make_parallel(func, qps=10):
lock = Lock()
threads_execution_que = []
limit_hit = False
def qps_manager(arg):
current_second = time.time()
lock.acquire()
if len(threads_execution_que) >= qps or limit_hit:
limit_hit = True
if current_second - threads_execution_que[0]
В идеале Код должен занять не более 1,5 секунды, но в настоящее время он занимает около 12-14 секунд.
Скрипт ускоряется до ожидаемой скорости, как только я удаляю логику менеджера QPS. коробка.
Подробнее здесь: https://stackoverflow.com/questions/593 ... -in-python
Попытка добавить контроль дроссельной заслонки для параллельных вызовов API в Python ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение