我想使用grequests.send
发送两个异步请求,它们之间有一个短但精确的延迟(比如20ms)。我只想在两个请求都发送后处理响应。
在两次发送之间放置time.sleep
不起作用,因为sleep
在发送请求2之前就向请求1的响应处理程序让步,所以请求2发送得晚。
grequests.send(req1, grequests.Pool(1))
time.sleep(delay)
grequests.send(req2, grequests.Pool(1)) # Request is sent late
我如何确保上面的整个块以原子方式运行,以确保尽可能接近请求之间的预期等待时间,而不会出现繁忙的等待?
做到这一点最优雅的方法是不占用时间。这样做:
from gevent import monkey
monkey.patch_all(time=False)
然后,当您使用time.sleep
时,它将不会屈服。
如果您使用gevent.sleep
,如果您也需要该功能,它仍然会休眠并屈服。
请注意,如果您使用其他使用time.sleep
的库,那么它们在这一点上不会屈服。但它很罕见,所以不应该成为问题。