Безопасно ли смешивать зеленые и родные потоки в одном процессе Python? - PullRequest
3 голосов
/ 09 марта 2012

Во-первых, безопасно ли смешивать зеленые потоки, такие как eventlet или gevent, с собственными потоками python из стандартной библиотеки, т. Е. Lib / threading.py в одном и том же процессе python?

Во-вторых, если это безопасно, это плохая идея?

Ответы [ 2 ]

5 голосов
/ 12 июня 2012

С gevent < 1.0 это, скорее всего, плохая идея, так как libevent не является поточно-ориентированным.С вами может быть все в порядке, если вы убедитесь, что потоки ОС никогда не взаимодействуют с libevent… Но это может быть сложно, и ошибки, вызванные отсутствием безопасности потоков libevent, не кажутся забавными для отладки.*

Однако gevent >= 1.0 использует libev, который полностью безопасен для потоков.Так что (насколько я могу судить) нет проблем смешивания зеленых потоков и потоков ОС.

0 голосов
/ 11 марта 2012

gevent предоставляет возможности исправления обезьян для потоков.

Гринлеты переключаются только друг на друга в пределах одного потока, поэтому гринлеты одного потока будут полностью отделены друг от друга.* Я бы не советовал использовать несколько ниток гринлетов, пока вы не показали, что для этого требуется производительность.

...