是否有可能在没有屈服的情况下入睡?

时间:2015-11-12 01:16:41

标签: python gevent greenlets grequests

我希望使用grequests.send发送两个异步请求,它们之间有一个短但确切的延迟(比如说20毫秒)。我只想在发出两个请求后处理响应。

在两个发送之间放置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

如何确保上面的整个块以原子方式运行,以确保尽可能接近请求之间的预期等待时间,而无需繁忙的等待?

1 个答案:

答案 0 :(得分:0)

最优雅的方法是不要修补补丁时间。所以这样做:

from gevent import monkey
monkey.patch_all(time=False)

然后当你使用time.sleep时,它不会屈服。

如果您使用gevent.sleep,如果您还需要该功能,它仍然可以睡眠和屈服。

请注意,如果您使用其他使用time.sleep的库,那么它们将不会在此时产生。但它很少见,所以不应成为问题。