在超时的子进程中运行python脚本

时间:2020-06-26 20:27:27

标签: python subprocess

此处是Python新手。所以我想在子进程中运行python脚本。到目前为止,我已经能够做到,一切都能按预期进行。但是,脚本可能包含无限循环,因此子进程将永远运行。此外,脚本还可能具有没有基本情况的递归功能。

无限循环可能很容易解决,尽管我不确定如何解决无限递归问题。如果您有任何想法,我很想听听他们的想法。无论如何,对于无限循环,如果进程运行的时间比说的要长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")

我从this博客文章中获得了超时代码。

理想情况下,如果进程没有超时,那么我可以收到输出/错误,那很好,但是如果出于某种原因超时,那么我想知道它确实是超时的。

现在,它似乎正在超时,但是如果我尝试使用out,err = proc.communicate(),则服务器将挂起。如果我看一下活动监视器,我可以看到一个Python进程使用了​​大约99%的CPU。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

也许您可以在此处使用此解决方案来获取所有输出,直到完成/超时: https://stackoverflow.com/a/4418193/593045 只需将超时轮询添加到循环中即可。

无限递归,我只能希望,有一种方法可以某种方式检查Python的堆栈大小或类似情况。