我的理解是,一旦调用gevent.monkey.patch_all(),标准线程模块就会被修改为使用greenlets而不是python线程。因此,如果我根据python线程,锁,信号量等编写我的应用程序,然后调用patch_all,我是否可以获得gevent的全部好处,或者与使用显式gevent等价物相比,我是否会失去某些东西?
这个问题背后的动机是我正在编写一个使用一些线程/ greenlets的模块,我决定在使用gevent和使用线程之间进行显式切换是否有用,或者我是否可以使用线程+ 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()
答案 0 :(得分:2)
至少你会遗漏一些特定于greenlet的方法:链接,杀死,加入等。 另外,您不能将线程与例如gevent.pool模块一起使用,这可能非常有用。 创建Thread对象的开销很小。