因此,我一直在尝试为完全合乎道德的目的编写一个递归重代码,我注意到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()
很抱歉必须包含我的全部代码,但我根本不知道在哪里或如何解决问题
提前谢谢
这不是递归的有效用法,因为问题本身不是递归的。如果我们将代码更改为迭代,它将无限期地在固定内存量中运行:
在我的测试运行中,它在四分钟内找到了目标短语:
测试了9356241个随机字符串
自从我旅行以来,我就没有使用过WiFi,但我设法在飞机上玩了一会儿,用while环路做了同样的事情,效果非常好!我仍然不确定你的作品是如何运作的,而我的原创作品则不然,所以我会很快仔细看看,看看是否有什么想法。 谢谢你们的帮助
相关问题 更多 >
编程相关推荐