情况:我有一个网站,允许人们使用共享托管服务器上的Python解释器,以不同的语言(特别是我创建的esolang)执行任意代码.我在一个单独的进程中运行此代码,该进程的时间限制为60秒.
问题:你可以做类似(相当于Python)的东西10**(10**10),它会迅速消耗比我分配给我的更多的内存.显然,它也锁定了Apache - 或者响应时间太长 - 所以我必须重启它.
我已经看到了这个问题,但是给出的答案使用的是Perl,我完全不知道,因此我想在Python中找到答案.不过,操作系统也是 Linux.
具体来说,我想要以下特点:
我使用这段代码(在Django视图中)来创建进程并运行它(proxy_prgm是一个Manager,所以我可以从解释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()
Run Code Online (Sandbox Code Playgroud)
如果您需要更多详细信息,请不要犹豫,告诉我要编辑什么(或问我问题).
小智 4
另一种可能有效的方法;使用resource.setrlimit()(更多详细信息请参见另一个StackOverflow答案)。似乎通过这样做,您可以对进程及其子进程设置内存限制;如果达到限制,您必须弄清楚如何处理。我没有使用它的个人经验,但希望这样做可以阻止 Apache 锁定你。
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |