Каковы преимущества использования модуля Eventlet в python над модулем потоковой передачи?

В частности, класс GreenPool в Eventlet. Я проверил некоторый код для загрузки больших файлов на S3 в виде отдельных частей многостраничной загрузки. До сих пор я заметил, что при использовании eventlet использование ЦП значительно ниже. Просто ищите другие плюсы и минусы для Eventlet, просто используя потоки. Спасибо.

Ответ 1

В принципе, зеленые потоки Eventlet следует считать легким аналогом потоков ОС для всех практических целей. Плюсы:

  • дешевле создавать с точки зрения процессора, памяти и системных вызовов (0)
  • дешевле переключиться; это особенно актуально в Python 2.x, где каждый поток активно пытается захватить GIL, который отбрасывает процессор.

Минусы:

  • важно, поскольку многие зеленые потоки работают в одном потоке ОС, когда syscall (например, open (2)) в одном из них блокирует поток ОС, все зеленые потоки также блокируются.
  • нет SMP (multicpu/multicore); но затем с GIL, это также верно для потоков ОС в Python. С greenlet [1] это ограничение является более строгим, поскольку невозможно, чтобы некоторое расширение C освобождало GIL, чтобы другие зеленые потоки продолжались.

Вы также можете найти этот ответ полезным: Является ли greenthread равным" real " нить

[1] библиотека "threading", используемая Eventlet https://github.com/python-greenlet/greenlet