2012-03-09 9 views
3

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

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

+0

Если вы используете зеленые темы, зачем вам нужен родной поток? – Seth

ответ

5

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

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

-1

gevent предоставляет monkey patching abilities для потоков.

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

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

+0

Я думаю, что здесь объясняется, почему это не очень хорошая идея. –

+0

@NiklasB. Возможно, потому, что многопоточность всегда является источником путаницы и труднодоступных ошибок. Поэтому, если вы не получите ничего (или очень мало) от многопоточности, лучше избегайте его. – sloth