python如果父线程不活动,如何创建自动终止子线程

时间:2015-09-15 07:40:01

标签: python-2.7

如何创建一个生成多个子线程的python程序。 主线程&子线程并行执行。子线程需要检查 如果父亲还活着,如果没有活着,则所有子进程都应该自行终止。

2 个答案:

答案 0 :(得分:2)

您可以将threading.currentThread()给出的引用从父级传递给子级线程,并定期检查父级是否仍然存活。

import threading
import time


class Child(threading.Thread):
    def __init__(self, parent_thread):
        threading.Thread.__init__(self)
        #self.daemon = True
        self.parent_thread = parent_thread

    def run(self):
        while self.parent_thread.is_alive():
            print "parent alive"
            time.sleep(.1)
        print "quiting"

Child(threading.currentThread()).start()
time.sleep(2)

作为第二种选择,您可以调用self.parent_thread.join()等待阻止该线程完成。

https://docs.python.org/2/library/threading.html#threading.Thread.join

或者您可以将子线程设置为daemon模式,但如果只有守护程序线程处于活动状态,整个过程将终止。这不一定是你想要优雅关闭的东西。

https://docs.python.org/2/library/threading.html#threading.Thread.daemon

答案 1 :(得分:0)

你应该是Thread对象的daemon属性,如下所示:

import threading
import time

def worker():
    while True:
        time.sleep(1)
        print('doing work')

t = threading.Thread(target=worker)
t.daemon = True
t.start()

编辑:要使用多个线程,您可以创建一个线程列表:

my_threads = []
for i in range(0, 5):
    my_threads.append(threading.Thread(target=worker))
    my_threads[-1].daemon = True