[英]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.