我认为这是一个简单的线程设置:生成一个守护进程的子线程,然后等待键盘输入停止:
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: ...
我做错了什么?
答案 0 :(得分:2)
您应该拨打start()
而不是run()
。后者在当前线程的上下文中调用您的线程func,而不是新线程。因此,您的代码永远不会进入while
循环。
答案 1 :(得分:1)
使用'target'参数创建Thread对象时,目标应该是一个可调用的,它将在启动后在新线程中运行。您在构造函数中调用了QueueMonitor(),因此它在创建线程之前运行。因为你的QueueMonitor永远运行,所以python永远不会创建Thread。
只需传递函数的名称:
MASTER = threading.Thread(target=QueueMonitor)