3

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

我是否正确,可以通过调用sleep(0)每个循环迭代来完成与 Gevent 相同的操作?

在解析 db 查询或 Python 代码(不是 IO 操作)的阻塞时间可以忽略不计时,这对于 Web 服务器是否真的有必要?

4

2 回答 2

2

Geventgevent.idle()只是为了这个目的而打电话(这似乎没有记录:http ://www.gevent.org/gevent.html#useful-general-functions )。

但是,如果您确定循环会执行一些耗时的 CPU 繁重处理,最好使用multiprocessingThreads 将其卸载到真正的并行工作者,但请记住,您必须采取额外措施才能很好地与 Gevent 一起工作(AFAIK)。

于 2014-04-30T16:31:23.697 回答
0

一般不会,

但是,如果处理整个阵列所需的 CPU 时间如此之大以至于它产生的延迟是不可接受的,那么您应该将整个事情卸载到另一个进程/任务队列系统。

每次你做 sleep(0) 时,你都会增加更多的开销(切换进出),所以它会让情况变得更糟。

CPU 密集型和 IO 密集型任务在同一进程中不能很好地混合。

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

于 2014-04-30T16:27:58.510 回答