首页 > 解决方案 > 在python中使用多处理运行多个进程的问题

问题描述

我的程序 audio()、motion() 和vibration() 中有 3 个函数,每个函数的定义方式是它们从各自的传感器收集数据。我编写了一个从音频和振动传感器收集数据的 python 程序和一个从运动传感器获取数据的 C 程序(它比 python 快得多)。

最初我使用多处理库中的“进程”来同时运行音频()和振动(),效果非常好。但是现在当我尝试同时运行 motion() 时,问题就出现了。问题是在 audio() 完成之前,motion() 进程不会启动,反之亦然,因为它应该实时运行,所以我需要给键盘中断以完成 audio() 或 motion()过程。

据我了解,任何一个过程(动作和音频)都会等待对方完成,然后开始执行。但我的目标是将它们一起运行,以便我可以在同一时间轴上获取数据。

def vibration():
    #collects vibration data from raspberry shake
    ....
    ....

def audio():
    #uses pyaudio to record audio data
    ....
    ....

def motion():
    command = 'rtl_sdr -f 433000000 -g 15 -s 1024000 - | ./rf_receiver'
    subprocess.run(command)

p1 = Process(target=_thread.start_new_thread(fetch_data, ("hello",)))
p1.start()
p2 = Process(target=audio())
p2.start()
p3 = Process(target=motion())
p3.start()

p1.join()
p2.join()
p3.join()

标签: pythonpython-3.xmultiprocessingpython-multiprocessing

解决方案


你的问题是你从你的主进程调用你的工作函数,并且只将它们的返回值作为target参数传递给Process. 您可能想要类似p2 = Process(target=audio)(没有()after audio)和p3 = Process(target=motion). 您可能还想要类似的东西p1,但我不知道您当前的代码对那里的线程做了什么,所以我不能轻易修复它。


推荐阅读