Comment on page
基于 Eventlet 的并发
- 事件的下发是隐式的:意味着您可以轻松的在 Python 解释器中使用 Eventlet,也可以将其作为大型应用程序的一部分。
Celery
支持 Eventlet
作为可选执行池的实现,在某些情况下要优于 prefork
。但是你需要确保一项任务不会太长时间阻塞事件循环。一般来说,与 CPU 绑定的操作不适用与 Eventlet。并且还要注意的是,一些第三方的库,通常指带有C扩展的,由于无法使用猴子补丁,因此不能从使用 Eventet
中获得益处。如果你无法确定,可以参考它们的官方文档。如 pylibmc
不允许于 Eventlet
一起使 用,但是 psycopg2
可以,虽然它们都是带有 C 扩展的库。prefork
池是利用多进程,但是数量受限于每个 CPU
只能有几个进程。使用 Eventlet
,您可以有效地产生数百或者数千个绿色线程。在一个动态中转系统的非正式测试中,Eventlet
池可以每秒获取并处理数百个动态,而 prefork
池处理 100 条动态花费了14秒之多。但请注意,这是 异步 I/O 的优势所在(异步的HTTP请求)。您也许需要将 Eventlet
和 prefork
职程搭配使用,并根据兼容性或者最适合处理的角度来路由任务。你可以使用
Celery
的职程参数 -P 来启用 Eventlet
。$ celery -A proj worker -P eventlet -c 1000
最近更新 3yr ago