簡體   English   中英

subprocess.wait(timeout=15) 不工作

[英]subprocess.wait(timeout=15) is not working

代碼:

import os
import subprocess


execs = ['C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof2.exe', # --> Child 1
         'C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof5.exe', # --> Child 2
         'C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof10.exe',...] # --> Child 3 and more
print('Parent Process id : ', os.getpid())
process = [subprocess.Popen(exe) for exe in execs]
for proc in process:
    try:
        proc.wait(timeout=15)
        print('Child Process id : ', proc.pid)
        if proc.returncode == 0:
            print(proc.pid, 'Exited')

    except subprocess.TimeoutExpired:
        proc.terminate()
        print('Child Process with pid',proc.pid ,'is killed')

一些子進程將需要超過 15 秒才能執行。 所以,我必須殺死超時的進程。 但是proc.wait(timeout=15)沒有引發異常,而是執行該過程。

我也試過[subprocess.Popen(exe, timeout=15) for exe in execs]但得到錯誤:

TypeError: __init__() got an unexpected keyword argument 'timeout'

您不是在等待並行進程 - 您是在給它們每個連續 15 秒的時間來做他們的事情。

你可能想要這樣的東西來給它們最多 15 秒的並行時間。

import os
import subprocess
import time


execs = [
    "C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof2.exe",
    "C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof5.exe",
    "C:\\Users\\XYZ\\PycharmProjects\\Task1\\dist\\Multiof10.exe",
]
print("Parent Process id : ", os.getpid())
process = [subprocess.Popen(exe) for exe in execs]
start_time = time.time()
while True:
    elapsed_time = time.time() - start_time
    any_alive = False
    for proc in process:
        ret = proc.poll()
        if ret is None:  # still alive
            if elapsed_time >= 15:
                print("Killing:", proc.pid)
                proc.terminate()
            any_alive = True
    if not any_alive:
        break
    time.sleep(1)

暫無
暫無

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

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