【问题标题】: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 会等待所有线程完成。

    你有两个选择:

    1. 在脚本末尾添加t.join()。这将等待t 完成。您需要为所有非后台线程执行此操作。
    2. 在脚本末尾添加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
      >>> 
      

      【讨论】:

        猜你喜欢
        • 2012-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多