0

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

    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:  ...

我究竟做错了什么?

4

2 回答 2

2

你应该打电话start()而不是run(). 后者在当前线程的上下文中调用你的线程函数,而不是新线程。结果,您的代码永远不会进入while循环。

于 2013-11-01T22:37:00.793 回答
1

当您使用 'target' 参数创建 Thread 对象时,目标应该是一个可调用的,它将在新线程启动后运行。您在构造函数中调用了 QueueMonitor(),因此它在创建线程之前运行。因为您的 QueueMonitor 永远运行,python 从来没有达到创建线程的地步。

只需传递函数的名称:

MASTER = threading.Thread(target=QueueMonitor)
于 2013-11-02T01:02:34.783 回答