子流程不会死

时间:2015-03-17 08:45:20

标签: python multithreading subprocess

关闭我的应用程序时,所有线程和Tkinter线程成功关闭,但是我退出时拒绝关闭的子进程。

class ThreadedTask(Thread):

    def __init__(self, queue):
        Thread.__init__(self)
        self.queue = queue

    def run(self):
        proc = Popen("receivetest -f=/dev/pcan33".split(), stdout = PIPE)
        payload = iter(proc.stdout.readline, "")
        for line in payload:
            if line[0].isdigit():
                splitline = line.split()
                self.dictAdd(splitline)

这是包含子进程的类。

这就是开头的电话:

if __name__ == "__main__":

    root = tk.Tk()

    Data = Queue.Queue()
    DataThread = ThreadedTask(Data)
    DataThread.daemon = True
    DataThread.start()

    myapp = BaudWindow(root)
    root.mainloop()

正如我所说,其他一切正确关闭。这是因为我已将子进程嵌套到线程中了吗?

2 个答案:

答案 0 :(得分:1)

如果父进程默认死亡,子进程不会自动死亡。见Python: how to kill child process(es) when parent dies?

您可以在您的情况下明确地致电proc.terminate(),例如atexit处理程序。

答案 1 :(得分:0)

那是因为你没有启动子进程而是一个单独的线程。请尝试使用subprocess.popen()。它按照你想要的方式工作。