gevent的python线程?

时间:2012-10-29 17:00:59

标签: python multithreading gevent

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() 

为什么'打印2'没有运行,该怎么办?

如果要下载文件,多线程和gevent,哪个更快?

2 个答案:

答案 0 :(得分:2)

这是一个有效的问题。

这是因为在gevent中,只要主要的greenlet退出,程序就会退出。使用线程,Python等待所有线程完成。

您有两种选择:

  1. 在脚本末尾添加t.join()。这将等待t完成。您需要为所有非后台线程执行此操作。
  2. 在脚本末尾添加gevent.wait()。这将等待事件循环退出 - 这意味着所有greenlet和线程。
  3. 请注意,gevent.wait()仅适用于1.0(download 1.0rc here)。 join适用于所有版本。

答案 1 :(得分:0)

为什么尝试在gevent类继承者中使用thread? 工作示例:

>>> 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
>>>