5

我的理解是,一旦我调用了 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()
4

1 回答 1

2

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

于 2012-08-04T16:31:51.620 回答