【问题标题】:Downside of using patched threading vs native gevent greenlets?使用修补线程与原生 gevent greenlets 的缺点?
【发布时间】:2012-08-03 10:27:25
【问题描述】:

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

【问题讨论】:

    标签: python gevent python-multithreading


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-11-15
      • 2014-02-01
      • 2012-06-14
      • 2013-10-25
      • 2012-05-27
      • 2012-07-14
      • 2018-10-13
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多