我来自 Node.js,其中https://github.com/caolan/async等库允许在不阻塞事件循环的情况下异步迭代数组。
我是否正确,可以通过调用sleep(0)
每个循环迭代来完成与 Gevent 相同的操作?
在解析 db 查询或 Python 代码(不是 IO 操作)的阻塞时间可以忽略不计时,这对于 Web 服务器是否真的有必要?
我来自 Node.js,其中https://github.com/caolan/async等库允许在不阻塞事件循环的情况下异步迭代数组。
我是否正确,可以通过调用sleep(0)
每个循环迭代来完成与 Gevent 相同的操作?
在解析 db 查询或 Python 代码(不是 IO 操作)的阻塞时间可以忽略不计时,这对于 Web 服务器是否真的有必要?
Geventgevent.idle()
只是为了这个目的而打电话(这似乎没有记录:http ://www.gevent.org/gevent.html#useful-general-functions )。
但是,如果您确定循环会执行一些耗时的 CPU 繁重处理,最好使用multiprocessing
Threads 将其卸载到真正的并行工作者,但请记住,您必须采取额外措施才能很好地与 Gevent 一起工作(AFAIK)。
一般不会,
但是,如果处理整个阵列所需的 CPU 时间如此之大以至于它产生的延迟是不可接受的,那么您应该将整个事情卸载到另一个进程/任务队列系统。
每次你做 sleep(0) 时,你都会增加更多的开销(切换进出),所以它会让情况变得更糟。
CPU 密集型和 IO 密集型任务在同一进程中不能很好地混合。
或者,如果您不需要很多并发连接,请将 gevent 替换为 pre-fork 服务器。