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

在具有超时的子进程中运行python脚本,python,subprocess,Python,Subprocess,这里是Python新手。所以我想在子流程中运行python脚本。到目前为止,我能够做到这一点,一切都按预期进行。但是,脚本可能包含一个无限循环,因此子流程将永远无法运行。此外,脚本还可能有一个递归函数,没有基本情况 无限循环可能很容易解决,尽管我不完全确定如何解决无止境递归问题。如果你有什么想法,我很想听。无论如何,对于无限循环,如果进程运行的时间超过3秒,我想终止进程,这样它就不会永远运行 这是我的密码: kill=lambda进程:process.kill() cmd=[“python”,f

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

无限循环可能很容易解决,尽管我不完全确定如何解决无止境递归问题。如果你有什么想法,我很想听。无论如何,对于无限循环,如果进程运行的时间超过3秒,我想终止进程,这样它就不会永远运行

这是我的密码:

kill=lambda进程:process.kill()
cmd=[“python”,f“{settings.BASE_DIR}/api/scripts/run.py”]
proc=subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
my_timer=计时器(5,kill,[proc])
run.py
文件的内容是:

def解决方案(名称):
虽然(正确):
印刷品(名称)
解决方案(“乔”)
我从博客文章中得到了超时代码

理想情况下,如果进程没有超时,我可以收到输出/错误,但如果由于任何原因它超时,那么我想知道它超时了


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

也许您可以使用此解决方案获取所有输出,直到完成/超时: 只需将超时轮询添加到循环中


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

您可以尝试添加shell=True,看看这是否有帮助