首先,将绿色线程(如eventlet或gevent)与标准库中的python本机线程(即同一个python进程中的Lib / threading.py)混合是否安全?
其次,如果它是安全的,这是一个坏主意吗?
答案 0 :(得分:5)
使用gevent < 1.0
这很可能是一个坏主意,因为libevent
不是线程安全的。如果你确保操作系统线程永远不会与libevent
交互,你可能会没事......但这可能很棘手,libevent
缺乏线程安全导致的错误听起来不是很有趣调试。
但是,gevent >= 1.0
使用libev
,这完全是线程安全的。所以(据我所知)混合绿色线程和OS线程没有问题。
答案 1 :(得分:-1)
gevent为线程提供monkey patching abilities。
Greenlets只在一个线程内切换到彼此,因此一个线程的greenlets将完全独立,并且与另一个线程无关。
在你表现出性能需要之前,我不建议使用多个greenlet线程。