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,哪个更快?
答案 0 :(得分:2)
这是一个有效的问题。
这是因为在gevent中,只要主要的greenlet退出,程序就会退出。使用线程,Python等待所有线程完成。
您有两种选择:
t.join()
。这将等待t
完成。您需要为所有非后台线程执行此操作。gevent.wait()
。这将等待事件循环退出 - 这意味着所有greenlet和线程。请注意,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
>>>