18
我使用gevent,我是猴子修補所有東西。
看起來像猴子修補會導致線程串行工作。使用gevent monkey線程修補線程使線程連續工作
我的代碼:
import threading
from gevent import monkey; monkey.patch_all()
class ExampleThread(threading.Thread):
def run(self):
do_stuff() # takes a few minutes to finish
print 'finished working'
if __name__ == '__main__':
worker = ExampleThread()
worker.start()
print 'this should be printed before the worker finished'
所以預期線程是行不通的。
但如果我刪除monkey.patch_all()
它工作正常。
的問題是,我需要monkey.patch_all()
使用GEVENT(現在上面的代碼示出)
我的解決辦法:
我改變了
monkey.patch_all()
到
monkey.patch_all(thread=False)
所以我不修補該線程。
我已經編輯我的問題。我無法使用睡眠,因爲我的工作需要幾分鐘時間, – yossi 2012-02-08 12:09:13
@yossi如果你有一項任務需要很長時間才能完成,並且無法在某個時間點產生控制權,那麼你需要真正的線程而不是協程。在這種情況下,我會說你最好不要補丁線程。 – jcollado 2012-02-08 12:18:26
好吧,我做的是monkey.patch_all(thread = False) – yossi 2012-02-08 14:24:08