Gevent:在每个forloop迭代中产生结果是一个好的实践吗?

2024-09-25 18:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我是从节点.js其中,https://github.com/caolan/async等库允许异步迭代数组而不阻塞事件循环。在

通过在每个循环迭代中调用sleep(0)来实现Gevent的相同功能,我是不是正确?在

在解析数据库查询时,这对web服务器来说是必要的,还是Python代码(不是IO操作)的阻塞时间可以忽略不计?在


Tags: https功能github服务器comweb数据库async
2条回答

Gevent有一个gevent.idle()调用,只是为了这个目的(它似乎没有文档化:http://www.gevent.org/gevent.html#useful-general-functions)。在

但是,如果您确定循环将执行一些耗时的CPU密集型处理,那么最好使用multiprocessing或线程将其卸载给真正的并行工作线程,但请记住,您必须采取额外的措施,以使其中任何一个都能很好地与Gevent(afaik)一起工作。在

一般不会

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

每次你睡觉(0)都会增加更多的开销(开关输入和输出),所以这会使情况变得更糟。在

CPU和IO绑定的任务在同一个进程中不能很好地混合在一起。在

或者,如果不需要很多并发连接,可以用pre-fork服务器替换gevent。在

相关问题 更多 >