在经历了整整一天的黑客攻击之后,我提出了这个问题,并试图找出这里的问题所在。
我想使用requests包发送请求,并在非阻塞模式下进行。
为此,我使用的是带有猴子补丁功能的精细gevent包,我已经使用了很长时间。
我有一个主循环,它接收一条消息并生成一个新的“绿色”,为每条消息创建一个POST请求。按照spawn命令,主循环执行一个gevent.sleep(0),以允许绿包完成他们的工作。
下面的代码是一个简化的示例(没有主循环):
from gevent import monkey; monkey.patch_all()
import gevent # (version 1.0.2)
import requests # version 2.7.0
def f():
requests.post('http://localhost:8888/', data='*' * 80)
gevent.spawn(f)
gevent.sleep(0)如果尝试从命令行(或文件)运行If,则将不会发送请求。
在玩完之后,我设法得到以下代码来发送请求:
sleep的值更改为0.1 (这不是很好,因为我真的不希望主循环休眠)。这两种选择对我来说都是一个很大的否定。
有没有可能有人知道为什么会有这种奇怪的行为,我该怎么纠正呢?
发布于 2016-02-18 12:45:37
原来这是我们想要的行为。
下面是关于这个主题的更多细节的链接:https://github.com/gevent/gevent/issues/744
发布于 2016-02-19 01:31:51
所以,我认为你需要的是:gevent.joinall([g1, g2, ...]),而不是gevent.sleep
https://stackoverflow.com/questions/35461355
复制相似问题