我正在制作一个程序,该程序可以通过键盘上的某个键(使用Pynput)来打开和关闭。我将键盘侦听器循环放在第一个线程中,将动作循环放在第二个线程中。问题是,在我启动代码后,仅在9到10秒钟过去之后,它不会立即收听键盘。有时它拒绝对Esc按钮做出反应,有时它可以工作。如何解决滞后?代码可以吗?
from threading import Thread
from pynput import keyboard
import time
flag = False
kill = False
def on_press(key):
global flag
global kill
if key == keyboard.KeyCode.from_char('a'):
print('pressed A')
flag = not flag
if key == keyboard.Key.esc:
kill = True
return False
def thr2():
print('joining...')
with keyboard.Listener(on_press=on_press) as listen:
listen.join()
def thr1():
while True:
if kill:
break
if flag:
print('looping....')
time.sleep(0.4)
if __name__ == "__main__":
thread1 = Thread(target=thr1)
thread2 = Thread(target=thr2)
thread1.start()
thread2.start()
看起来实际的延迟来自pynput keyboard.Listener上下文处理程序本身。我无法告诉您幕后发生的事情,但是延迟并不是来自您管理线程的方式。
# pynput library creating keyboard.Listener thread causes the delay
with keyboard.Listener(on_press=on_press) as listen:
print('listen thread created') # This does not happen until after the delay
listen.join()
您可能需要改写该问题,以便使其仅适用于pynput keyboard.Listener