2012-08-03 63 views
5

我的理解是,一旦我調用gevent.monkey.patch_all(),就會修改標準線程模塊以使用greenlets而不是python線程。因此,如果我用python線程,鎖,信號量等方式編寫我的應用程序,然後調用patch_all,我是否獲得了gevent的全部好處,還是因爲使用顯式gevent等價物而失去了某些東西?使用補丁線程vs本地gevent greenlet的缺點?

這個問題背後的動機是我正在編寫一個使用一些線程/ greenlet的模塊,並且我正在決定使用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() 

回答

2

至少你會寬鬆一些的greenlet,具體方法:鏈接,殺,加入等 你也不能,使用線程例如,gevent.pool模塊,可以是非常有用的。 創建Thread對象的開銷很小。