如何使用Python自动终止占用过多内存的进程?

如何使用Python自动终止占用过多内存的进程?,python,linux,Python,Linux,情况:我有一个网站,允许人们在共享托管服务器上使用Python解释器以不同的语言(特别是我创建的esolang)执行任意代码。我在一个单独的进程中运行此代码,该进程的时间限制为60秒 问题:你可以做类似(Python等价物)10**(10**10)的事情,这会快速消耗比我分配给我的内存多得多的内存。显然,它还锁定了Apache,或者需要很长时间才能响应,所以我必须重新启动它 我已经看到了,但是给出的答案使用Perl,我根本不知道,因此我想要一个Python的答案。不过,操作系统也是Linux 具

情况:我有一个网站,允许人们在共享托管服务器上使用Python解释器以不同的语言(特别是我创建的esolang)执行任意代码。我在一个单独的进程中运行此代码,该进程的时间限制为60秒

问题:你可以做类似(Python等价物)
10**(10**10)
的事情,这会快速消耗比我分配给我的内存多得多的内存。显然,它还锁定了Apache,或者需要很长时间才能响应,所以我必须重新启动它

我已经看到了,但是给出的答案使用Perl,我根本不知道,因此我想要一个Python的答案。不过,操作系统也是Linux

具体来说,我想要以下特征:

  • 自动运行
  • 强制终止任何超过内存限制(如1MB或100MB)的进程
  • 杀死我的代码生成的超过24小时的任何进程
  • 我使用这段代码(在Django视图中)创建流程并运行它(
    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()