我有一个程序,其中有很多音乐甲板(甲板1,甲板2,music_clip_deck,speackers_deck,ip_call_1,ip_call_2,ip_call_3).每一副牌在一个单独的过程中工作.我用来裁剪mp3文件/重传流/来自麦克风的语音/来自aiortc—pyav的语音的块时间是125msec.之后,我填充了一些队列(每个单独的进程一个队列),我发送最后一个队列到最后一个线程,以便在听到和传输给客户端之前进行最后的音频处理.
我如何同步所有进程在一起,使每个进程的一个while运行时间正好需要125 msec?
以下是一个帮助数字:
这种方法可能根本没有帮助:
class Deck_1_Proc(Process):
...
...
...
def run(self):
while(True):
t1 = time.time()
...
...
...
t2 = time.time()
if t2 - t1 < 0.125:
time.sleep(0.125 - (t2 - t1))
也许一个更好的方法应该是使用javascript setInterval和time参数:125msec
from threading import Event, Thread
def call_repeatedly(interval, func, *args):
stopped = Event()
def loop():
while not stopped.wait(interval): # the first call is in `interval` secs
func(*args)
Thread(target=loop).start()
return stopped.set
#call:
cancel_future_calls = call_repeatedly(0.125, run)
#stopping to app termination:
cancel_future_calls()