我有多线程 Python 程序。主线程响应用户命令:
while 1:
try:
cmd = raw_input(">> ")
if cmd == "exit":
break
# other commands
except KeyboardInterrupt:
break
# other stuffs
问题:如何从其他子线程中断 while 循环?
sys.exit()
不是一个选项,因为在 while 循环之外还有其他代码。
我想到的可能的解决方案:
- 中断主线程
- 写一个“退出”到
sys.stdin
解决方案1:我试过thread.interrupt_main()
了,但是没有用。
解决方案2:调用sys.stdin.write()
不起作用,以下代码也不起作用:
f = open(sys.stdin.name, "w")
f.write("exit")
f.close()
另一个类似的问题提供了一个答案,建议您生成另一个进程并使用subprocess.Popen.communicate()
它向它发送命令。但是是否可以对communicate()
当前流程本身进行操作?