Python 使用修补线程与本机gevent Greenlet相比的缺点是什么?

Python 使用修补线程与本机gevent Greenlet相比的缺点是什么?,python,gevent,python-multithreading,Python,Gevent,Python Multithreading,我的理解是,一旦我调用了gevent.monkey.patch_all(),标准线程模块就被修改为使用greenlet而不是python线程。因此,如果我用python线程、锁、信号量等编写应用程序,然后调用patch_all,那么我是获得了gevent的全部好处,还是与使用显式gevent等价物相比,我在某些方面有所损失 这个问题背后的动机是,我正在编写一个使用一些线程/greenlet的模块,我正在决定在使用gevent和使用线程之间进行显式切换是否有用,或者我是否可以只使用线程+补丁,而不

我的理解是,一旦我调用了gevent.monkey.patch_all(),标准线程模块就被修改为使用greenlet而不是python线程。因此,如果我用python线程、锁、信号量等编写应用程序,然后调用patch_all,那么我是获得了gevent的全部好处,还是与使用显式gevent等价物相比,我在某些方面有所损失

这个问题背后的动机是,我正在编写一个使用一些线程/greenlet的模块,我正在决定在使用gevent和使用线程之间进行显式切换是否有用,或者我是否可以只使用线程+补丁,而不丢失任何东西

用代码来说,这是

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()

至少你会失去一些特定于greenlet的方法:链接、杀死、加入等等。 此外,您不能将线程与gevent.pool模块一起使用,这可能非常有用。 而且创建线程对象的开销很小