我的应用程序中有一个侦听stdin
的阅读线程。它会阻塞,直到有一些输入可用。当一些命令到达时,它接受这些行,检查它们是否是有效的命令,并将它们放入队列中。你知道吗
def ReadCommands( queue ):
for cmd in stdin:
if cmd=="":
break
# Check if cmd is valid and add to queue
queue = Queue()
thread = Thread( target=ReadCommands, args=( queue, ) )
thread.start()
现在,当主程序想要退出时,它首先必须加入这个读取线程。问题是线程在一个我无法控制的循环中。即使stdin.close()
也不起作用。你知道吗
如何从主线程中断读取线程中的for循环?你知道吗
或者,如何编写for循环(需要一段时间?)能够添加我自己的布尔变量来打破循环?小心,我不想要一个活跃的等待循环!你知道吗
如果有一些线程只想在退出程序时关闭,那么在daemon mode中启动它们通常是最好的方法。如果所有非守护进程线程都退出,应用程序将结束,并带走所有守护进程线程。你知道吗
请注意,您应该只对不必执行清理的线程执行此操作;您的示例似乎适合于此。 另外,如果您正在执行阻塞C级操作,守护进程线程可能仍然会阻塞,直到它返回到实际的python作用域。在这种情况下,没有python级别的选项来中断块。例如,从断开的套接字读取数据就是这样一个问题。你知道吗
如果需要在停止程序之前显式终止阻塞线程,则可能必须使用python's C-API。这可以更干净地实现,但在原则上是可行的。你知道吗
相关问题 更多 >
编程相关推荐