在单个python进程中混合绿色线程和本机线程是否安全?

时间:2012-03-09 18:56:16

标签: python multithreading gevent eventlet green-threads

首先,将绿色线程(如eventlet或gevent)与标准库中的python本机线程(即同一个python进程中的Lib / threading.py)混合是否安全?

其次,如果它是安全的,这是一个坏主意吗?

2 个答案:

答案 0 :(得分:5)

使用gevent < 1.0这很可能是一个坏主意,因为libevent不是线程安全的。如果你确保操作系统线程永远不会与libevent交互,你可能会没事......但这可能很棘手,libevent缺乏线程安全导致的错误听起来不是很有趣调试。

但是,gevent >= 1.0使用libev,这完全是线程安全的。所以(据我所知)混合绿色线程和OS线程没有问题。

答案 1 :(得分:-1)

gevent为线程提供monkey patching abilities

Greenlets只在一个线程内切换到彼此,因此一个线程的greenlets将完全独立,并且与另一个线程无关。

在你表现出性能需要之前,我不建议使用多个greenlet线程。