特别是 Eventlet 中的 GreenPool 类。我已经测试了一些代码,将大文件作为分段上传的各个部分上传到 S3。到目前为止我注意到的是,当使用 eventlet 时,CPU 使用率要低得多。只是寻找 Eventlet 的其他优点和缺点,而不是仅使用线程。谢谢。
问问题
10159 次
1 回答
12
基本上,出于所有实际目的,Eventlet 绿色线程被认为是 OS 线程的轻量级模拟。优点:
- 在 CPU、内存和系统调用方面创建成本更低 (0)
- 转换成本更低;在 Python 2.x 中尤其如此,其中每个线程都积极尝试获取 GIL,这会浪费 CPU。
缺点:
- 很重要,因为许多绿色线程在一个 OS 线程中运行,当其中一个线程中的系统调用(例如 open(2))阻塞 OS 线程时,所有绿色线程也被阻塞。
- 没有 SMP(多 CPU/多核);但是对于 GIL,Python 中的 OS 线程也是如此。对于 greenlet[1],这个限制更加严格,因为某些 C 扩展不可能释放 GIL 以允许其他绿色线程继续进行。
您可能还会发现这个答案很有用:绿色线程是否等于“真实”线程
[1] Eventlet 使用的“线程”库https://github.com/python-greenlet/greenlet
于 2013-05-01T07:10:10.770 回答