繁体   English   中英

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

[英]Check if subprocess currently running in any thread using Python

我正在使用threading.Timer函数一次运行多个计时器。 每个计时器结束后,调用的函数将通过“ say”命令使用子进程,如下所示:

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

有时,计时器彼此之间很快就会关闭,然后开始互相交谈。 我如何让他们互相等待,以免彼此重叠?

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

如果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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM