我正在使用threading.Timer函数一次运行多个计时器。一旦每个计时器结束,被调用的函数使用子进程和"说"命令,如下所示:
subprocess.call(["say", "hello world"])
有时候,计时器会在一个接一个的时间后发生,然后他们开始互相交谈。我怎样才能让他们互相等待,以免他们重叠?
我仍然希望能够在主程序中执行其他操作(例如创建新的计时器),所以我不认为我可以使用popen.wait()或.join()
答案 0 :(得分:1)
如果say
可执行文件快速运行,您可以锁定其调用:
lock = threading.Lock()
def your_thread_function():
do_something_slow()
with lock:
subprocess.call(["say", "hello world"])
如果say
可执行文件本身很慢,则必须存储其输出并仅在调用结束时将其打印出来(再次,使用锁定):
lock = threading.Lock()
def your_thread_function():
# You can also use subprocess.check_output.
p = subprocess.Popen(["say", "hello world"], stdout=subprocess.PIPE)
out, err = p.communicate()
with lock:
print(out)