Gevent:在每个for循环迭代中产生是一个好习惯吗?

时间:2014-04-02 22:19:47

标签: python gevent greenlets

我来自Node.js,https://github.com/caolan/async之类的库允许在不阻塞事件循环的情况下通过数组异步迭代。

我是否认为可以通过在每次循环迭代时调用sleep(0)来完成与Gevent相同的操作?

在解析数据库查询时,Web服务器实际上是必需的,或者Python代码的阻塞时间(不是IO操作)可以忽略不计吗?

2 个答案:

答案 0 :(得分:2)

Gevent只为此目的进行gevent.idle()调用(似乎没有记录:http://www.gevent.org/gevent.html#useful-general-functions)。

但是,如果你确定循环会花费一些时间来处理CPU繁重的处理,那么最好使用multiprocessing或Threads将它卸载到真正的并行工作者,但要记住你必须采取额外措施,以便与Gevent很好地合作(afaik)。

答案 1 :(得分:0)

一般不,

但是,如果处理整个阵列所需的CPU时间太长以至于它所创建的延迟是不可接受的,那么您应该将整个数据卸载到另一个进程/任务队列系统。

每次进入睡眠状态(0)都会增加更多开销(切换进出),因此会让情况变得更糟。

CPU绑定和IO绑定任务在同一进程中混合不好。

或者,如果您不需要很多并发连接,请将gevent替换为前叉服务器。