我正面临一个问题,在删除分配给已加载的pickle的变量后,内存没有被释放。例如:
with open("/home/public/clusters.pkl", 'rb') as pickle_file:
pickle_data = pickle.load(pickle_file)
del pickle_data我尝试使用del、gc.collect、pickle_data = None和and方法,但都没有用。该文件包含一个很大的列表,加载到内存后会增加约50 to。只有在会话完成后才会释放内存。我在python web服务器中使用它,所以我不能在每次运行后重新启动web服务器。
proc = psutil.Process(os.getpid())
collect()
mem0 = proc.memory_info().rss
print(mem0)
with open("/home/public/deep1b/clusters_500k/clusters/clusters.pkl", 'rb') as pickle_file:
pickle_data = pickle.load(pickle_file)
mem1 = proc.memory_info().rss
print(mem1)
del pickle_data, pickle_file
mem2 = proc.memory_info().rss
print(mem2)
32194560
48298516480
48072097792我也尝试了使用多进程,只是我需要将它复制到另一个对象中,当我试图使用它隐藏的dict从进程中返回另一个对象时……
你知道我该怎么解决这个问题吗?
发布于 2021-07-29 14:53:47
也许可以单独转储/加载列表项,这样就不会在一开始就将它们全部加载到内存中?
import pickle
# Demo data
data = ['foo', 'bar']
# Store
with open('pickle.dat', 'wb') as f:
pickle.dump(len(data), f)
for item in data:
pickle.dump(item, f)
# Load and process
with open('pickle.dat', 'rb') as f:
n = pickle.load(f)
for _ in range(n):
print(pickle.load(f))输出:
foo
barhttps://stackoverflow.com/questions/68577852
复制相似问题