我正在使用gevent并且我正在修补所有东西。
看起来猴子补丁导致线程连续工作。
我的代码:
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)
所以我不补线。
当线程在gevent中被猴子修补时,它们的行为就像协程一样。这意味着您必须显式地放弃控件,以使其他协程能够执行。
方法是调用已修补的阻塞操作(这将自动产生)或^{} :
如果用
Greenlet
替换Thread
,则可以保留基于线程的类,例如:到时候你想怎么办就怎么办。
相关问题 更多 >
编程相关推荐