2

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

在两个发送之间放置 atime.sleep不起作用,因为sleep在发送请求 2 之前,请求 1 的响应处理程序产生,因此请求 2 发送较晚。

grequests.send(req1, grequests.Pool(1))
time.sleep(delay)
grequests.send(req2, grequests.Pool(1)) # Request is sent late

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

4

1 回答 1

0

做到这一点的最优雅的方法是不猴子补丁时间。所以这样做:

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

然后,当您使用time.sleep它时,它不会产生。

如果您使用gevent.sleep,如果您也需要该功能,它仍然会休眠并产生。

请注意,如果您使用其他使用 的库time.sleep,它们将不会在那时产生。但这种情况很少见,所以应该不是问题。

于 2016-03-24T22:44:08.303 回答