yos*_*ssi 22 python multithreading gevent
我正在使用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'
Run Code Online (Sandbox Code Playgroud)
所以线程没有按预期工作.
但如果我删除monkey.patch_all()
它,它工作正常.
问题是我需要monkey.patch_all()
使用gevent(现在在上面的代码中显示)
我的解决方案
我改变了
monkey.patch_all()
Run Code Online (Sandbox Code Playgroud)
至
monkey.patch_all(thread=False)
Run Code Online (Sandbox Code Playgroud)
所以我不修补线程.
jco*_*ado 26
当线程在gevent中进行猴子修补时,它们就像协同程序一样.这意味着您必须明确地产生控制权以使其他协同程序可以执行.
执行此操作的方法是调用已修补的阻塞操作(这将自动生成)或gevent.sleep
:
#!/usr/bin/env python
from gevent import monkey, sleep
monkey.patch_all()
import threading
class ExampleThread(threading.Thread):
def run(self):
for i in xrange(10):
print 'working'
sleep()
if __name__ == '__main__':
worker = ExampleThread()
worker.start()
print 'this will be printed after the first call to sleep'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
18007 次 |
最近记录: |