我的程序audio((,motion((和vibration((中有3个函数,每个函数的定义方式都是从各自的传感器收集数据。我写了一个从音频和振动传感器收集数据的python程序和一个从运动传感器获取数据的C程序(它比python快得多(。
最初,我使用多处理库中的"进程"来同时运行audio((和vibration((,这绝对可以正常工作。但是现在当我尝试与它们一起运行 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()
您的问题是您从主进程调用工作线程函数,并且仅将其返回值作为target
参数传递给Process
。您可能想要类似p2 = Process(target=audio)
的东西(audio
后没有()
(,p3 = Process(target=motion)
.您可能还希望p1
类似的东西,但我不知道您当前的代码在那里对线程做了什么,所以我无法轻松修复它。