我有3个活动的主题。 其中一个激活其他Thread并使用getch()来检测ESC键,如果按下该程序则关闭。
当其他两个线程完成其操作(不按ESC)时,它们成功关闭,但第一个线程仍然等待按下ESC。因此,该计划仍在运行。
class tracking():
def __init__(self):
self.tecla = '\x1b' #ESC
self.case = None
def pressed(self, case):
self.case = getch()
def inicio(self): #The Thread in question calls this function
Thread(target=self.pressed(self.case)).start()
while True:
if self.case is not None:
if self.case == self.tecla:
sys.exit()
else:
self.case = None
self.pressed(self.case)
答案 0 :(得分:0)
那是因为select
是同步的。有几个选择:
您可以{{1}}等待I / O操作(包括键盘),请参阅此处:https://docs.python.org/2/library/select.html
您可以使用一个允许您检测按键的库,然后循环并等到有一个按键。如果你使用像pygame这样的东西,这可能很麻烦。
您可以使用thread.interrupt_main自行破解线程,请参阅此处:https://docs.python.org/2/library/thread.html#thread.interrupt_main