簡體   English   中英

Python:並行運行 2 個進程,然后等待所有進程超時

[英]Python: Run 2 processes in parallel then wait for all with timeout

為以下 python3 任務尋找一些最佳實踐:

  • 以非阻塞模式運行進程program1
  • 以非阻塞模式運行進程program2
  • 超時后等待全部或殺死它們

我想我知道如何為 1 個過程做到這一點:

import subprocess
p = subprocess.Popen('program1', shell=True)
try:
    stdout, stderr = p.communicate(timeout=200)
except subprocess.TimeoutExpired as t:
    print(t)
    p.kill()
    outs, errs = p.communicate()

但是,我無法將這種方法擴展到 2 進程的情況,因為p.communicate阻塞直到program1結束或超時。

我也想立即知道其中一個程序是否失敗。

Python3,操作系統 Linux

UPD我需要明智地實現它,沒有任何繁忙的循環、線程等

Process 有一個類似於線程的join()方法。 所以,在你的情況下:

proc_1 = Process(target=my_func_1)
proc_2 = Process(target=my_func_2)

for proc in [proc_1, proc_2]:
    proc.start()

# They are doing their thing and when they've completed they will join the 
# main process and your main program can resume
for proc in [proc_1, proc_2]:
    proc.join()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM