我正在使用线程从流(/dev/tty1)中读取字符串,同时在主循环中处理其他事情。当按下CTRL-C时,我希望该线程能够和主程序一起终止。
from threading import Thread
class myReader(Thread):
def run(self):
with open('/dev/tty1', encoding='ascii') as myStream:
for myString in myStream:
print(myString)
def quit(self):
pass # stop reading, close stream, terminate the thread
myReader = Reader()
myReader.start()
while(True):
try:
pass # do lots of stuff
KeyboardInterrupt:
myReader.quit()
raise
通常的解决方案 - 在run()循环内部使用布尔变量 - 在这里不起作用。有什么推荐的方法来处理这个问题?
我可以设置守护进程标志,但那样我就无法使用quit()方法了,而这个方法可能以后会证明非常有价值(用于一些清理工作)。有什么想法吗?
ctypes.c_long(tid)
,否则我会得到res == 0
。 - faultyctypes.c_long(tid)
代替了仅有的tid
,现在它可以按预期工作了。完全工作的代码片段。实际上,异步异常可能不会中断对文件对象的阻塞读取,因此变成了等同于可以从主线程设置的手动检查标志的解决方案--这是一个更干净的解决方案。如果需要中断阻塞读取,则应该使用非阻塞I/O。 - Irfy