【发布时间】:2021-12-27 17:29:03
【问题描述】:
通过一个简单的示例,我尝试演示具有两个进程的典型多处理设置:
- 接收数据(这里模拟随机数组生成)
- 发送数据
我想通过键盘按键终止第一个进程,这会将None 发送到队列,然后停止程序。
我使用keyboard 包来检测是否按下了某个键。
import multiprocessing
import keyboard
import numpy as np
def getData(queue):
KEY_PRESSED = False
while KEY_PRESSED is False:
if keyboard.is_pressed("a"):
queue.put(None)
print("STOP in getData")
KEY_PRESSED=True
else:
data = np.random.random([8, 250])
queue.put(data)
def processData(queue):
FLAG_STOP = False
while FLAG_STOP is False:
data = queue.get() # # ch, samples
if data is None:
print("STOP in processData")
FLAG_STOP = True
else:
print("Processing Data")
print(str(data[0,0]))
if __name__ == "__main__":
queue = multiprocessing.Queue()
processes = [
multiprocessing.Process(target=getData, args=(queue,)),
multiprocessing.Process(target=processData, args=(queue,))
]
for p in processes:
p.start()
for p in processes:
p.join()
如果我调试代码,实际检测到按下的键,但同时来自 while 循环的随机数据被放入队列。这使得调试代码变得非常困难。
此外,我尝试了pynput 包,它创建了一个线程来检测按下的键。使用这种方法但同样的问题发生了,程序并没有通过发送None 到另一个进程来保存地终止执行。
如果有人能指出所描述方法中的错误,或者提出另一种在进程中保存检测按键的方法,我将非常高兴。
【问题讨论】:
标签: python multiprocessing python-multiprocessing