情况:我有一个网站,允许人们用不同的语言执行任意代码 (特别是我创建的esolang),使用Python解释器共享托管服务器。我在一个单独的进程中运行此代码,该进程的时间限制为60秒。
问题:您可以执行类似(Python等效)10**(10**10)
之类的操作,这会快速消耗比我分配给我的更多内存。显然,它也会锁定Apache - 或者响应时间太长 - 所以我必须重启它。
我见过this question,但给出的答案使用的是Perl,我完全不知道,因此我想在Python中找到答案。但是OS 也是 Linux。
具体来说,我想要以下特点:
我使用这段代码(在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()
如果您需要更多详细信息,请不要犹豫,告诉我要编辑的内容(或向我提问)。
答案 0 :(得分:4)
另一种可行的方法;使用resource.setrlimit()(更多详情in this other StackOverflow answer)。看来,通过这样做,您可以为进程及其子进程设置内存限制;如果达到限制,你将不得不弄清楚如何处理。我没有使用它的个人经验,但希望这样做会阻止Apache锁定你。