如何中断线程中文件行的迭代

2024-04-19 05:48:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序中有一个侦听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循环(需要一段时间?)能够添加我自己的布尔变量来打破循环?小心,我不想要一个活跃的等待循环!你知道吗


Tags: in命令cmd应用程序forif队列queue
1条回答
网友
1楼 · 发布于 2024-04-19 05:48:18

如果有一些线程只想在退出程序时关闭,那么在daemon mode中启动它们通常是最好的方法。如果所有非守护进程线程都退出,应用程序将结束,并带走所有守护进程线程。你知道吗

请注意,您应该只对不必执行清理的线程执行此操作;您的示例似乎适合于此。 另外,如果您正在执行阻塞C级操作,守护进程线程可能仍然会阻塞,直到它返回到实际的python作用域。在这种情况下,没有python级别的选项来中断块。例如,从断开的套接字读取数据就是这样一个问题。你知道吗


如果需要在停止程序之前显式终止阻塞线程,则可能必须使用python's C-API。这可以更干净地实现,但在原则上是可行的。你知道吗

相关问题 更多 >