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