繁体   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