使用Python检查当前在任何线程中运行的子进程

时间:2015-11-05 22:46:33

标签: python timer subprocess python-multithreading

我正在使用threading.Timer函数一次运行多个计时器。一旦每个计时器结束,被调用的函数使用子进程和"说"命令,如下所示:

subprocess.call(["say", "hello world"])

有时候,计时器会在一个接一个的时间后发生,然后他们开始互相交谈。我怎样才能让他们互相等待,以免他们重叠?

我仍然希望能够在主程序中执行其他操作(例如创建新的计时器),所以我不认为我可以使用popen.wait()或.join()

1 个答案:

答案 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)