首先,将eventlet或gevent等绿色线程与标准库中的python原生线程(即Lib/threading.py)混合在同一个python进程中是否安全?
其次,如果它是安全的,这是一个坏主意吗?
首先,将eventlet或gevent等绿色线程与标准库中的python原生线程(即Lib/threading.py)混合在同一个python进程中是否安全?
其次,如果它是安全的,这是一个坏主意吗?
使用gevent < 1.0
它很可能是一个坏主意,因为libevent
它不是线程安全的。如果您确保操作系统线程永远不会与之交互,您可能会没事libevent
……但这可能会很棘手,并且libevent
由于缺乏线程安全性而导致的错误听起来对调试没有任何乐趣。
但是,gevent >= 1.0
useslibev
是完全线程安全的。所以(据我所知)混合绿色线程和操作系统线程没有问题。
gevent 为线程提供猴子修补功能。
Greenlets 只在一个线程内相互切换,因此一个线程的 greenlets 将与另一个线程完全分离且互不联系。
在你证明你有性能需要之前,我不建议使用多线程的 greenlets。