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

rki*_*788 10 python multithreading eventlet

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

tem*_*oto 9

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

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

缺点:

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

您可能还会发现此答案很有用:greenthread等于"真实"线程

[1] Eventlet使用的"线程"库https://github.com/python-greenlet/greenlet