如何使python脚本不崩溃?

2024-09-30 08:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图为GIMPS编写一个python脚本(查找mercenneprimes),但每次运行它时,它都会崩溃。有没有办法我可以改变它,这样它就不会占用这么多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开始,因为那是最后一个质数


Tags: in脚本trueforifdefrangecpu
2条回答

这个程序永远不会结束,而且总是崩溃。 由于restart总是True,它将以无限循环的方式继续,直到内存耗尽或达到最大入侵深度。在

即使没有这一点,我想知道整个算法是怎么做的:你总是用相同的定义范围调用函数restart_for(),这只依赖于nn不可能减少,因为每次{}-循环的迭代都会将其增加1。 这意味着n将在一段时间后变得太大。在

由于函数不断地调用自己,它将在某个时刻耗尽RAM,因为以前对该函数的每次调用的所有数据仍然存储在内存中(如果函数是while-循环,则不会发生这种情况)。 这也解释了上面描述的错误,即代码告诉您没有定义n:这是因为{}在RAM中不再存在。因为内存不足,Python决定删除它认为不再需要的任何内容,以便腾出更多空间。由于n是所有变量中定义时间最长的,因此它首先删除了这个变量。在

有一种技术涉及到删除代码块,直到发现哪个部分破坏了整个程序。在

试着把素数改成最小的素数,递增直到它断裂。这会让你很清楚是什么破坏了它。如果没有,尝试改变寻找素数的算法,并确保方程和语句也是正确的。如果这不起作用,试着移除elif,然后如果它仍然断裂,则移除If。向后看,直到你发现它什么时候起作用。一旦你发现程序运行,你就会知道你取出的代码块是问题所在,你可以看看这个代码块是如何编写的。在

所有这些都是开发人员的工作。否则,你就等着成为客户了。在

相关问题 更多 >

    热门问题