【发布时间】:2018-01-31 23:50:09
【问题描述】:
在 Windows 7 上运行 Python 3.4,Gio.MemoryInputStream 的关闭函数不会像它应该那样释放内存。测试代码是:
from gi.repository import Gio
import os, psutil
process = psutil.Process(os.getpid())
for i in range (1,10) :
input_stream = Gio.MemoryInputStream.new_from_data(b"x" * 10**7)
x = input_stream.close_async(2)
y = int(process.memory_info().rss / 10**6) # Get the size of memory used by the program
print (x, y)
这会返回:
True 25
True 35
True 45
True 55
True 65
True 75
True 85
True 95
True 105
这表明在每个循环中,程序使用的内存增加了 10 MB,即使关闭函数返回 True。 一旦 Stream 关闭,如何释放内存?
另一个好的解决方案是重用流。但是 set_data 或 replace_data 会引发以下错误: '不支持数据访问方法。改用普通的 Python 属性 很好,但是哪个属性?
我需要 Python 3.4 中的内存流。我用 PyPDF2 创建了一个 Pdf 文件,然后我想用 Poppler 预览它。由于 Poppler 中的一个错误(请参阅 Has anyone been able to use poppler new_from_data in python?),我无法使用 new_from_data 函数并想使用 new_from_stream 函数。
【问题讨论】: