在杀死一个使用过多内存的进程之前,我已经问过这个问题,并且我已经解决了大部分问题。
但是,存在一个问题:我尝试使用的方法似乎无法计算大量数字。 下面的这段代码旨在为该进程设置10秒的CPU时间限制。
import resource
import os
import signal
def timeRanOut(n, stack):
raise SystemExit('ran out of time!')
signal.signal(signal.SIGXCPU, timeRanOut)
soft,hard = resource.getrlimit(resource.RLIMIT_CPU)
print(soft,hard)
resource.setrlimit(resource.RLIMIT_CPU, (10, 100))
y = 10**(10**10)
在运行此脚本(在Unix计算机上)时,我希望看到的是:
-1 -1
ran out of time!
相反,我没有输出。 我获得输出的唯一方法是使用Ctrl + C,如果在10秒钟后按Ctrl + C,我将获得此输出:
^C-1 -1
ran out of time!
CPU time limit exceeded
如果我在10秒之前按Ctrl + C,则必须执行两次,控制台输出如下所示:
^C-1 -1
^CTraceback (most recent call last):
File "procLimitTest.py", line 18, in
y = 10**(10**10)
KeyboardInterrupt
在尝试并尝试解决这一问题的过程中,我还将Linux web455.webfaction.com 2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux放入打印和大数计算之间。 它似乎没有任何作用。 如果将y = 10**(10**10)更改为y = 10**10,则print和sleep语句将按预期工作。 在打印语句中添加flush=True或在打印语句后添加sys.stdout.flush()也不起作用。
为什么不能限制CPU时间来计算非常大的数字? 如何解决或至少减轻这种情况?
附加信息:
python版本:Linux web455.webfaction.com 2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Linux信息:Linux web455.webfaction.com 2.6.32-431.29.2.el6.x86_64 #1 SMP Tue Sep 9 21:36:05 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux