在python中使用Eventlet模块而不是线程模块有什么好处?

时间:2013-04-30 22:33:12

标签: python multithreading eventlet

特别是Eventlet中的GreenPool类。我已经测试了一些代码,将大型文件作为分段上传的单个部分上传到S3。到目前为止我注意到的是,当使用eventlet时,CPU使用率要低得多。只是使用线程来寻找Eventlet的其他优缺点。感谢。

1 个答案:

答案 0 :(得分:9)

基本上,对于所有实际用途,Eventlet绿色线程都被视为OS线程的轻量级模拟。优点:

  • 在CPU,内存和系统调用(0)
  • 方面创建成本更低
  • 转换成本更低;在Python 2.x中尤其如此,其中每个线程都主动尝试抓取浪费CPU的GIL。

缺点:

  • 重要,因为许多绿色线程在一个OS线程内运行,当其中一个线程中的系统调用(例如open(2))阻塞OS线程时,所有绿色线程也被阻塞。
  • 没有SMP(multicpu / multicore);但随后使用GIL,对于Python中的OS线程也是如此。使用greenlet [1]时,这种限制更严格,因为某些C扩展无法释放GIL以允许其他绿色线程继续进行。

您可能还会发现此答案很有用:Is a greenthread equal to a "real" thread

[1] Eventlet https://github.com/python-greenlet/greenlet

使用的“线程化”库