我来自Node.js,https://github.com/caolan/async之类的库允许在不阻塞事件循环的情况下通过数组异步迭代。
我是否认为可以通过在每次循环迭代时调用sleep(0)
来完成与Gevent相同的操作?
在解析数据库查询时,Web服务器实际上是必需的,或者Python代码的阻塞时间(不是IO操作)可以忽略不计吗?
答案 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替换为前叉服务器。