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

2024-04-27 23:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我看过this question,但是给出的答案使用Perl,我根本不知道,因此我希望用Python来回答。不过,操作系统也是Linux。在

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

  1. 自动运行
  2. 强制将杀死任何超过内存限制(如1MB或100MB)的进程
  3. 终止由我的代码生成的任何超过24小时的进程

我使用这段代码(在Django视图中)创建并运行它(proxy_prgm是一个管理器,因此我可以从解释esolang代码的程序中检索数据):

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()

如果您需要更多细节,请告诉我要编辑的内容(或问我问题)。在


Tags: 内存代码服务器语言uid进程网站时间