Python shell在打印4788行后重新启动

2024-09-30 01:35:57 发布

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

因此,我一直在尝试为完全合乎道德的目的编写一个递归重代码,我注意到pythonshell将在大约30秒后重新启动

起初我认为这是内存泄漏导致的堆栈溢出,所以我妥善处理了它;还是不走运。 然后,我使用tracemalloc查看了内存使用情况,发现在重新启动之前,内存只有1.3MB左右。我尝试了一系列方法来阻止内存泄漏,所有这些方法都给出了不同的最终内存大小,但仍然重新启动

这时我注意到,每次打印4788行之后,不管使用的内存总量如何,它都会重新启动

python可以打印的行数有限制吗?请帮忙

import random
import sys
import gc
import tracemalloc

tracemalloc.start()

def cleartrash():
    #gc.collect()

##    del genphrase

    print('clearedddddddddddddddddddddddddd')

sys.setrecursionlimit(99999999)
capitalsandlowers = ('qwertyuiopasdfghjklzxcvbnm')

print ('monkey experiment')
def generatephrase():
    generatedlength = random.randint(5,5)
    genphrase = ( ''.join(random.choice(capitalsandlowers) for i in range(generatedlength)) )
    
    print(genphrase)
    
    if genphrase == 'henry':
        print('done',genphrase)
    else:
        current, peak = tracemalloc.get_traced_memory()
        print(f"Current memory usage is {current / 10**6}MB; Peak was {peak / 10**6}MB")

        #cleartrash()
        del genphrase
        del generatedlength
        #gc.collect()
        generatephrase()

generatephrase()
tracemalloc.stop()

很抱歉必须包含我的全部代码,但我根本不知道在哪里或如何解决问题

提前谢谢


Tags: 方法内存代码importdefsysrandommb
2条回答

这不是递归的有效用法,因为问题本身不是递归的。如果我们将代码更改为迭代,它将无限期地在固定内存量中运行:

from random import randint, choices
from string import ascii_lowercase as capitalsandlowers

print("Monkey Experiment")

def generatephrase():
    while True:
        generatedlength = randint(5, 5)
        genphrase = ''.join(choices(capitalsandlowers, k=generatedlength))

        print(genphrase)

        if genphrase == 'henry':
            print("Done:", genphrase)
            break

generatephrase()

在我的测试运行中,它在四分钟内找到了目标短语:

Done: henry
193.963u 28.280s 3:53.61 95.1%  0+0k 0+0io 0pf+0w

测试了9356241个随机字符串

自从我旅行以来,我就没有使用过WiFi,但我设法在飞机上玩了一会儿,用while环路做了同样的事情,效果非常好!我仍然不确定你的作品是如何运作的,而我的原创作品则不然,所以我会很快仔细看看,看看是否有什么想法。 谢谢你们的帮助

相关问题 更多 >

    热门问题