此处是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。有什么想法吗?
答案 0 :(得分:0)
也许您可以在此处使用此解决方案来获取所有输出,直到完成/超时: https://stackoverflow.com/a/4418193/593045 只需将超时轮询添加到循环中即可。
无限递归,我只能希望,有一种方法可以某种方式检查Python的堆栈大小或类似情况。