【问题标题】:python thread by gevent?gevent的python线程?
【发布时间】:2012-10-29 17:00:59
【问题描述】:
import threading,gevent,gevent.monkey
class test(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print 1
gevent.sleep(2)
print 2
gevent.monkey.patch_thread()
t=test()
t.start()
为什么'print 2'不能运行,怎么办?
如果要下载文件,多线程和gevent,哪个更快?
【问题讨论】:
标签:
python
multithreading
gevent
【解决方案1】:
这是一个有效的问题。
这是因为在gevent中,一旦主greenlet退出,程序就会退出。使用线程,Python 会等待所有线程完成。
你有两个选择:
- 在脚本末尾添加
t.join()。这将等待t 完成。您需要为所有非后台线程执行此操作。
- 在脚本末尾添加
gevent.wait()。这将等待事件循环退出 - 这意味着所有 greenlet 和线程。
请注意,gevent.wait() 仅在 1.0 (download 1.0rc here) 中可用。 join 适用于所有版本。
【解决方案2】:
您为什么尝试在thread 类继承器中使用gevent?
工作示例:
>>> import threading, gevent, gevent.monkey
>>> gevent.monkey.patch_thread()
>>> def run(self):
... print 1
... gevent.sleep(2)
... print 2
...
>>> gevent.joinall([gevent.spawn(run, [])])
1
2
>>>