簡體   English   中英

在超時的子進程中運行 python 腳本

[英]Running a python script in a subprocess with timeout

Python 新手在這里。 所以我想在子進程中運行 python 腳本。 到目前為止,我能夠做到這一點,並且一切都按預期工作。 但是,腳本有可能包含無限循環,因此子進程將永遠運行。 此外,腳本也有可能具有沒有基本情況的遞歸 function。

無限循環可能很容易解決,盡管我不完全確定如何解決無限遞歸問題。 如果你有任何想法,我很想聽聽。 無論如何,對於無限循環,如果進程運行時間超過 3 秒,我想終止進程,使其不會永遠運行。

這是我的代碼:

kill = lambda process: process.kill()
cmd = ["python", f"{settings.BASE_DIR}/api/scripts/run.py"]
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
my_timer = Timer(5, kill, [proc])

run.py文件的內容是:

def solution(name):
    while(True):
        print(name)
    
solution("joe")

我從這篇博客文章中得到了超時代碼。

理想情況下,如果進程沒有超時,如果我能收到輸出/錯誤會很好,但如果出於某種原因它超時,那么我想知道它確實超時了。

現在,它似乎正在超時,但如果我嘗試使用out,err = proc.communicate() ,那么服務器就會掛起。 如果我查看我的活動監視器,我可以看到一個 python 進程占用了我大約 99% 的 CPU。 有任何想法嗎?

也許你可以在這里使用這個解決方案來獲取所有 output 直到它完成/超時: https://stackoverflow.com/a/4418193/593045只需將超時輪詢添加到循環中。

無限遞歸我只能希望,有一種方法可以以某種方式或類似的方式檢查 Python 的堆棧大小。

暫無
暫無

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

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