Я пытаюсь отправить запросы API с определенной скоростью (пример с использованием значения QPS), Я использую следующий код для запуска моих запросов (хранящихся в списке web_requests).Отправить несколько веб-запросов
Если я установил QPS = 10, задержка составит 0,1 с или 100 мс. Я использую time.sleep (0.1) и отправляю запрос, но этот код ожидает ответа HTTP удаленного конца, который составляет около 30 мс, поэтому я получаю 0,3 секунды дополнительной задержки. Как я могу отправить X веб-запросов в секундах, не дожидаясь ответа?
@gen.coroutine
def send_requests(campaign_instance):
...
http_client = httpclient.AsyncHTTPClient()
while True:
try:
web_request = web_requests.pop()
time.sleep(delay)
headers = {'Content-Type': 'application/json'}
request = httpclient.HTTPRequest(auth_username=settings.api_account,
auth_password=settings.api_password,
url=settings.api_web_request,
body=json.dumps(web_request),
headers=headers,
request_timeout=5,
method="POST")
yield http_client.fetch(request, callback=partial(handle_response, web_request["to"]))
gen_log.info("start_campaign() Requests in Queue: {}".format(len(web_requests)))
except httpclient.HTTPError, exception:
gen_log.info.exception("start_campaign() ".format(exception))
api_errors += 1
if handle_api_errors(api_errors):
break
except IndexError:
gen_log.info.info('start_campaign() Campaign web requests completed. API Errors: {}'.format(api_errors))
break
def start():
ioloop.IOLoop.current().run_sync(lambda: send_requests(campaign_instance))
log.info('process_campaign() Campaign completed')
campaign_instance.terminate()
Работал после вашего совета. благодаря – spicyramen