我的理解是,一旦我调用了 gevent.monkey.patch_all(),标准线程模块就被修改为使用 greenlets 而不是 python 线程。因此,如果我根据 python 线程、锁、信号量等编写我的应用程序,然后调用 patch_all,我是否获得了 gevent 的全部好处,或者与使用显式 gevent 等价物相比,我是否失去了一些东西?
这个问题背后的动机是我正在编写一个使用一些线程/greenlets的模块,我正在决定在使用gevent和使用线程之间进行显式切换是否有用,或者我是否可以只使用threading+patch_all而不会丢失任何事物。
把它放在代码中,这是...
def myfunction():
print 'ohai'
Greenlet.spawn(myfunction)
……和这个有什么不同吗?
import gevent.monkey
gevent.monkey.patch_all()
def mythread(threading.Thread):
def run(self):
print 'ohai'
mythread().start()