首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gevent猴子补丁破坏gevent.sleep(0)?

gevent猴子补丁破坏gevent.sleep(0)?
EN

Stack Overflow用户
提问于 2016-02-17 15:46:00
回答 2查看 452关注 0票数 1

在经历了整整一天的黑客攻击之后,我提出了这个问题,并试图找出这里的问题所在。

我想使用requests包发送请求,并在非阻塞模式下进行。

为此,我使用的是带有猴子补丁功能的精细gevent包,我已经使用了很长时间。

我有一个主循环,它接收一条消息并生成一个新的“绿色”,为每条消息创建一个POST请求。按照spawn命令,主循环执行一个gevent.sleep(0),以允许绿包完成他们的工作。

下面的代码是一个简化的示例(没有主循环):

代码语言:javascript
复制
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,则将不会发送请求。

在玩完之后,我设法得到以下代码来发送请求:

  1. 删除猴子的补丁线(这不是很好,因为这样就会阻塞),
  2. sleep的值更改为0.1 (这不是很好,因为我真的不希望主循环休眠)。

这两种选择对我来说都是一个很大的否定。

有没有可能有人知道为什么会有这种奇怪的行为,我该怎么纠正呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-18 12:45:37

原来这是我们想要的行为。

下面是关于这个主题的更多细节的链接:https://github.com/gevent/gevent/issues/744

票数 1
EN

Stack Overflow用户

发布于 2016-02-19 01:31:51

所以,我认为你需要的是:gevent.joinall([g1, g2, ...]),而不是gevent.sleep

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35461355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档