情况:我有一个网站,允许人们使用共享主机服务器上的Python解释器,以不同的语言(特别是我创建的esolang)执行任意代码。我在一个单独的进程中运行此代码,该进程的时间限制为60秒。在
问题是:您可以做类似于(Python等价物)10**(10**10)
的操作,这会迅速消耗比我分配给我的内存更多的内存。显然,它还锁定了Apache——或者需要很长时间才能响应——所以我必须重新启动它。在
我看过this question,但是给出的答案使用Perl,我根本不知道,因此我希望用Python来回答。不过,操作系统也是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()
如果您需要更多细节,请告诉我要编辑的内容(或问我问题)。在
另一种可行的方法:使用resource.setrlimit()(更多细节in this other StackOverflow answer)。这样做似乎可以为进程及其子进程设置内存限制;但是,如果达到该限制,则必须找出如何处理。我没有使用它的个人经验,但希望这样做可以阻止Apache锁定您。在
相关问题 更多 >
编程相关推荐