如何让python脚本不崩溃?

时间:2018-01-07 06:22:10

标签: python

所以我试图为GIMPS创建一个python脚本(找到mercenne primes),但每次运行它都会崩溃。有没有办法可以改变它,所以它不会使用这么多的CPU?这是脚本:

n = 77232917
restart = True
y = range(2,0.5*n - (n%2))
def restart_for(d):
    for x in d:
        if (2**n - 1) % x == 0:
            n += 1
            break
        elif x == 0.5*n - (n%2):
            print n
            n += 1
    if restart == True:
        restart_for(range(2,0.5*n - n%2))
restart_for(range(2,0.5*n - n%2))

注意:我从大约77000000开始,因为那是最后一个主要的

2 个答案:

答案 0 :(得分:0)

有一种技术涉及删除代码块,直到找到破坏整个程序的部分为止。

尝试将素数更改为最低素数,将其递增直至其中断。这应该让你很好地了解它是什么打破了它。如果没有,请尝试更改找到素数的算法,并确保方程和语句也正确。如果这不起作用,请尝试删除elif然后如果它仍然中断,请删除if。向后工作直到找到它的工作原理。一旦你发现程序运行,你就会知道你拿出的代码块是问题所在,你可以查看该块是如何编写的。

所有这些都是开发人员的工作。否则,你只是在等待成为一个客户。

答案 1 :(得分:0)

这个程序永远不会完成,并且总会崩溃。 由于restart始终为True,因此它将继续无限循环,直到您的RAM耗尽或达到最大入侵深度。

即使没有这个,我想知道整个算法的作用:你总是调用具有相同定义范围的函数restart_for(),它只取决于nn不可能减少,因为对于for - 循环的每次迭代,你继续增加1。 这意味着n会在一段时间后变得过大。

由于函数一直在调用自身,因此它会在某些时候耗尽RAM,因为来自函数的每个单独调用的所有数据仍然存储在内存中(如果函数是{{{ 1}} - 环)。 这也解释了您上面描述的错误,代码告诉您while未定义:这是因为n在RAM中不再存在。因为你的内存不足,所以Python决定删除任何它认为不再需要的东西,以便腾出更多空间。由于n是所有变量中最长的定义,因此它首先删除了这个变量。