递归终止衍生的greenlets

时间:2014-06-04 13:34:11

标签: python kill gevent spawn

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。请告诉我一种方法,我可以通过递归方式杀死由它产生的小果实,以便所有4只被杀死。

1 个答案:

答案 0 :(得分:0)

gevent维护和事件队列,一旦调用join()就开始运行。没有存储的树结构,至少不是我所知道的。如果你想要杀死所有衍生的孩子,你自己维护一个产卵列表,并通过它们进行迭代杀死。