【问题标题】:Recursively terminate spawned greenlets递归终止产生的greenlets
【发布时间】:2014-06-04 13:34:11
【问题描述】:
import gevent

def f1():
    gevent.spawn(f3)
    while True:
        print "f1"
        gevent.sleep(1)

def f2():
    gevent.spawn(f1)
    while True:
        print "f2"
        gevent.sleep(1)

def f3():
    gevent.spawn(f4)
    while True:
        print "f3"
        gevent.sleep(1)

def f4():
    while True:
        print "f4"
        gevent.sleep(1)


g2 = gevent.spawn(f2)
g2.join(timeout=1.0)

def kill(g):
    ##
    ##   kill children here
    ##
    g.kill()



for i in range(100):
    print "--"*4, i
    if i == 10: 
        kill(g2)

    gevent.sleep(1)

在第十次迭代之后,kill 被调用,这会杀死正在运行 f2 的 greenlet。请告诉我一种方法,我可以递归地杀死由它产生的greenlets,以便将所有4个都杀死。

【问题讨论】:

  • 停止暴力。永远不要考虑杀害儿童。
  • 致通过谷歌发现此问题的任何人:请自首

标签: python kill gevent spawn


【解决方案1】:

gevent 维护并在调用 join() 后开始运行的事件队列。没有存储的树结构,至少我不知道。如果您想杀死所有生成的孩子,请自己维护一个生成列表,并遍历它们以杀死。

【讨论】:

    猜你喜欢
    • 2013-11-15
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2018-02-03
    相关资源
    最近更新 更多