如何解决长期运行这个循环会阻塞我的记忆吗?
感谢您抽出时间看这个问题!
我正在创建一个 Python 脚本以在 RaspBerry Pi Zero 上运行。这个想法是它会在附加屏幕上无限循环地一次一行滚动很长的文本(指环王三部曲)。
我已经使用以下代码和示例文本进行了循环。然而,我对 Python 使用内存的方式并不十分熟悉。随着每一行的生成和打印,这种方法是否会继续占用越来越多的内存(或者,换句话说,这最终会冻结)?
import time
import tkinter as tk
book = open('ave.txt','r')
lines = book.readlines()
position = 0
class Example(tk.Frame):
def __init__(self,*args,**kwargs):
tk.Frame.__init__(self,**kwargs)
self.text = tk.Text(self,height=6,width=40)
self.text.pack(side="left",fill="both",expand=True)
self.readbook()
def readbook(self):
global position
self.text.insert("end",lines[position])
self.text.see("end")
position += 1
self.after(1000,self.checkloop)
def checkloop(self):
global position
if position == 6:
position = 0
self.text.insert("end",'\n' + '\n')
self.readbook()
else:
self.readbook()
if __name__ == "__main__":
root =tk.Tk()
frame = Example(root)
frame.pack(fill="both",expand=True)
root.mainloop()
(感谢 Bryan Oakley,他为该实现提供了框架,并在 https://stackoverflow.com/a/30671211/15277790 上给出了答案)
解决方法
这里有很多复杂的问题没有解决。假设你有 512mb 我不这么认为。您的汇总文档的大小是多少? readlines() 的文档说明它将整个文档加载到内存中(它已经在内存中打开,因此是一个副本),将每一行解析为一个字符串,并将它们存储在一个数组中。如果整个文档像 25mb 一样,你应该很好。你总是可以使用像
这样的东西来遍历这些行with open('lor.txt') as f:
while True:
line = f.readline()
if not line:
break
pass
这样您就不会一次将整个文档重新加载到内存中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。