首先,将绿色线程(如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