我在我的脚本中运行两个单独的进程。第一个进程 p1 启动 oneSecondTimer 例程,该例程恰好在 1 秒处执行并执行一些工作。第二个进程 p2 触发一个键盘监听器,它监听键盘。
目前,我希望 p1 进程在用户按下退出键时停止。我尝试使用全局变量,它不起作用。我尝试使用队列,它有效,但它绝对不是最优雅的解决方案。它实际上是一个丑陋的解决方法,不会扩大规模。
最终,脚本将有许多单独的并行进程,这些进程将通过按下各种键来控制(不仅仅是启动/停止)。这是代码,
import time
from pynput import keyboard
from multiprocessing import Process, Queue
def on_release(key):
if key == keyboard.Key.esc:
print('escaped!')
# Stop listener
return False
def keyboardListener(q):
with keyboard.Listener(on_release=on_release) as listener:
listener.join()
print('Keybord Listener Terminated!!!')
# Make the queue NOT EMPTY
q.put('Terminate')
def oneSecondTimer(q):
starttime = time.time()
# Terminate the infinite loop if
# queue is NOT EMPTY
while (not q.qsize()):
print("tick")
time.sleep(1.0 - ((time.time() - starttime) % 1.0))
return False
if __name__ == '__main__':
q = Queue()
p1 = Process(target=oneSecondTimer, args=(q,))
p1.start()
p2 = Process(target=keyboardListener, args=(q,))
p2.start()