Pynput键盘侦听器导致延迟

时间:2020-01-19 06:02:18

标签: python multithreading python-multithreading pynput

我正在制作一个程序,该程序通过键盘上的某个键(使用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()

2 个答案:

答案 0 :(得分:1)

看起来实际的延迟是来自Pynput键盘监听器上下文处理程序本身。我无法告诉您幕后情况,但是延迟并不是来自您管理线程的方式。

# 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

答案 1 :(得分:0)

这是一种与多处理程序完美配合的解决方案:

C