首先,將綠色線程(如eventlet或gevent)與來自標準庫(即Lib/threading.py)的python本機線程混合在同一個python進程中是否安全?在單個python進程中混合使用綠色線程和本地線程是否安全?
其次,如果它是安全的,它是一個壞主意?
首先,將綠色線程(如eventlet或gevent)與來自標準庫(即Lib/threading.py)的python本機線程混合在同一個python進程中是否安全?在單個python進程中混合使用綠色線程和本地線程是否安全?
其次,如果它是安全的,它是一個壞主意?
使用gevent < 1.0
這很可能是個壞主意,因爲libevent
不是線程安全的。如果你確保該操作系統線程從未與libevent
交互時,您可能是正確的......但是,這可能是棘手的,和錯誤造成的libevent
的缺乏線程安全的不健全,像任何樂趣的調試。
然而,gevent >= 1.0
使用libev
,這完全是線程安全的。所以(據我所知)混合綠色線程和操作系統線程沒有問題。
GEVENT線程提供monkey patching abilities。
Greenlets只有一個線程內切換到海誓山盟,讓一個線程的greenlets將完全從其他的獨立和隔離。
,直到你已經證明我不會建議使用greenlets的多線程,你有性能需要這麼做。
我想爲什麼它不是一個好主意的一些解釋是在這裏丟失。 – 2012-03-11 17:00:30
@NiklasB。也許是因爲多線程永遠是混淆和難以追蹤錯誤的可能來源。所以如果你沒有從多線程中得到任何東西(或者很少),最好避免它。 – sloth 2012-06-12 07:11:10
如果你使用綠色線程,爲什麼你需要一個本地線程? – Seth 2012-03-09 19:47:35