在python中使用多重处理运行多个进程的问题

时间:2019-09-13 00:36:30

标签: python python-3.x multiprocessing python-multiprocessing

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

最初,我是使用多处理库中的“ Processes”来同时运行audio()和振动(),这绝对好用。但是现在当我尝试同时运行motion()和它们时,问题就存在了。问题是motion()进程直到audio()完成才开始,反之亦然,并且由于它应该实时运行,因此我需要给键盘中断以完成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()

1 个答案:

答案 0 :(得分:1)

您的问题是,您正在从主流程中调用辅助函数,并且仅将其返回值作为target参数传递给Process。您可能想要类似p2 = Process(target=audio)(在()之后没有audio)和p3 = Process(target=motion)之类的东西。您可能还希望为p1做些类似的事情,但是我不知道您当前的代码正在使用那里的线程做什么,所以我很难修复它。

相关问题