0
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,哪个更快?

4

2 回答 2

2

这是一个有效的问题。

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

你有两个选择:

  1. t.join()在脚本末尾添加。这将等待t完成。您需要为所有非后台线程执行此操作。
  2. gevent.wait()在脚本末尾添加。这将等待事件循环退出 - 这意味着所有 greenlet 和线程。

请注意,这gevent.wait()仅在 1.0 中可用(在此处下载 1.0rc)。在join所有版本中都可用。

于 2012-11-07T08:00:01.680 回答
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
>>> 
于 2012-10-29T17:14:46.803 回答