Python:threading:守护进程不应该将stdin / stdout返回给主线程吗?

时间:2013-11-01 22:33:32

标签: python multithreading

我认为这是一个简单的线程设置:生成一个守护进程的子线程,然后等待键盘输入停止:

    MASTER = threading.Thread(target=QueueMonitor())
    MASTER.setDaemon(True)
    MASTER.start()

    while True:
        ZZ = raw_input("running...\ntype 'ZZ' to quit \n\n")
        if 'ZZ' in ZZ:
            print "1. cleaning up... (this can take some time)"
            KILLALL = 1
            sys.exit()

子线程循环并在每个'x'秒打印输出,同时等待键盘输入杀死所有内容。 代码永远不会返回到'ZZ'输入,但似乎坚持使用子线程:

thread:  1
thread:  2
thread:  3
thread:  4
thread:  5
thread:  6
thread:  7
thread:  ...

我做错了什么?

2 个答案:

答案 0 :(得分:2)

您应该拨打start()而不是run()。后者在当前线程的上下文中调用您的线程func,而不是新线程。因此,您的代码永远不会进入while循环。

答案 1 :(得分:1)

使用'target'参数创建Thread对象时,目标应该是一个可调用的,它将在启动后在新线程中运行。您在构造函数中调用了QueueMonitor(),因此它在创建线程之前运行。因为你的QueueMonitor永远运行,所以python永远不会创建Thread。

只需传递函数的名称:

MASTER = threading.Thread(target=QueueMonitor)