使用 gevent 的并发¶
介绍¶
gevent 主页将其描述为一个基于协程的 Python 网络库,它使用 greenlet 在 libev 或 libuv 事件循环之上提供高级同步 API。
特性包括:
- 基于 libev 或 libuv 的快速事件循环
- 基于 greenlets 的轻量级执行单元
- 重用 Python 标准库概念的 API(例如有 events 和 queues)
- 支持 SSL 的协作式套接字
- 通过线程池、dnspython 或 c-ares 执行的协作式 DNS 查询
- 猴子补丁工具使第三方模块变得协作式
- TCP/UDP/HTTP 服务器
- 子进程支持(通过 gevent.subprocess)
- 线程池
gevent 受 eventlet 启发,但具有更一致的 API、更简单的实现和更好的性能。阅读其他人为什么使用 gevent并查看基于 gevent 的开源项目列表。
启用 gevent¶
您可以使用 celery worker -P gevent 或 celery worker --pool=gevent 工作器选项来启用 gevent 池。
celery -A proj worker -P gevent -c 1000
示例¶
请参阅 Celery 发行版中的 gevent 示例 目录,了解一些使用 Eventlet 支持的示例。
已知问题¶
使用 Python 3.11 和 gevent 存在一个已知问题。该问题在此处有文档记录,并在 gevent 问题 中得到解决。升级到 greenlet 3.0 可以解决此问题。