首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我会因为长期运行这个循环而阻塞我的记忆吗?

我会因为长期运行这个循环而阻塞我的记忆吗?
EN

Stack Overflow用户
提问于 2021-02-25 22:24:56
回答 1查看 30关注 0票数 1

感谢您抽出时间来关注这个问题!

我正在创建一个Python脚本运行在树莓派Zero上。它的想法是,它将滚动一个非常长的文本(指环王三部曲),一次一行,在一个附加的屏幕上无限循环。

我已经使用以下代码和一个示例文本使循环工作。然而,我对Python使用内存的方式并不是很熟悉。当生成和打印每一行时,这种方法是否会继续占用越来越多的内存(或者,换句话说,这最终会冻结吗)?

代码语言:javascript
复制
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, *args, **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上的回答为这个实现提供了框架)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-25 22:40:03

这里有很多没有解决的复杂性。假设你有512mb,我不这么认为。聚合文档的大小是多少?readlines()的文档指出,它将整个文档加载到内存中(该文档已经在内存中打开,因此是一个副本),将每一行解析为一个字符串,并将其存储在一个数组中。如果整个文档大小为25mb,则应该很好。您总是可以使用下面的命令遍历这些行

代码语言:javascript
复制
with open('lor.txt') as f:
    while True:
        line = f.readline()
        if not line:
            break
        pass

这样就不会一次将整个文档重新加载到内存中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66370390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档