如何使用Python自动终止占用过多内存的进程?
情况:我有一个网站,允许人们在共享托管服务器上使用Python解释器以不同的语言(特别是我创建的esolang)执行任意代码。我在一个单独的进程中运行此代码,该进程的时间限制为60秒 问题:你可以做类似(Python等价物)如何使用Python自动终止占用过多内存的进程?,python,linux,Python,Linux,情况:我有一个网站,允许人们在共享托管服务器上使用Python解释器以不同的语言(特别是我创建的esolang)执行任意代码。我在一个单独的进程中运行此代码,该进程的时间限制为60秒 问题:你可以做类似(Python等价物)10**(10**10)的事情,这会快速消耗比我分配给我的内存多得多的内存。显然,它还锁定了Apache,或者需要很长时间才能响应,所以我必须重新启动它 我已经看到了,但是给出的答案使用Perl,我根本不知道,因此我想要一个Python的答案。不过,操作系统也是Linux 具
10**(10**10)
的事情,这会快速消耗比我分配给我的内存多得多的内存。显然,它还锁定了Apache,或者需要很长时间才能响应,所以我必须重新启动它
我已经看到了,但是给出的答案使用Perl,我根本不知道,因此我想要一个Python的答案。不过,操作系统也是Linux
具体来说,我想要以下特征:
proxy_prgm
是一个管理器,因此我可以从解释esolang代码的程序中检索数据):
如果您需要更多详细信息,请毫不犹豫地告诉我编辑内容(或向我提问)。另一种可能有效的方法;使用(更多详细信息)。这样做似乎可以设置进程及其子进程的内存限制;不过,你必须弄清楚如果达到极限,该如何处理。我没有使用它的个人经验,但希望这样做能阻止Apache锁定您。一些想法:您可以使用ulimit设置生成进程的最大内存。您可以使用psutil来监视内存使用情况,并在它失控时将其杀死。我同意您应该使用操作系统的
ulimit
来监视资源。它可以用来确保你不消耗其他资源,比如文件锁。只是一个旁注——对我来说,视图似乎不是这样代码的合适位置。
prgmT[uid] = multiprocessing.Process(
target = proxy_prgm.runCatch,
args = (steps,),
name="program run")
prgmT[uid].start()
prgmT[uid].join(60) #time limit of 1 minute
if prgmT[uid].is_alive():
prgmT[uid].terminate()
proxy_prgm.stop()