Я хочу отправить два асинхронных запроса, используя grequests.send
с короткой, но точной задержкой (скажем, 20 мс) между ними. Я хочу обработать ответы только после отправки обоих запросов.Можно ли спать без урока?
Помещение time.sleep
между двумя отправками не работает, потому что sleep
дает обработчик ответа для запроса 1 до отправки запроса 2, поэтому запрос 2 отправляется с опозданием.
grequests.send(req1, grequests.Pool(1))
time.sleep(delay)
grequests.send(req2, grequests.Pool(1)) # Request is sent late
Как я могу обеспечить весь блок выше выполняемый атомарна, чтобы обеспечить как можно ближе к ожидаемому времени ожидания между запросами, без напряженного ожидания?
Я не думаю, что попытка приостановить процесс для _exact_ количества времени на многозадачной ОС выполнима; ваш процесс находится во власти планировщика ОС, который может возобновить ваш процесс позже запрошенного времени ожидания. –
@ColonelThirtyTwo True. Я предполагаю, что я имею в виду «как можно точнее». Я могу терпеть это, если ошибаюсь через несколько мс. – akxlr
Вы можете сделать «занятый цикл ожидания» и наблюдать часы до тех пор, пока не пройдет сколько-нибудь времени. – martineau