我编写了一个脚本,该脚本将从文本文件中读取值到字典对象my_dict中。我有两个文件,一个是35mb,另一个是4.1Gb。在我的系统上,我有8GB的内存和32GB的交换文件。
文件看起来像这样:
dict_key_a 1,2,3,4,5,6 ...
dict_key_b 7,8,9,1,2,3 ...
...
这是我用来将其转换为字典的功能:
import os
import time
def unpack_dictionary(directory, verbose=False):
start_time = time.time()
if verbose:
print("[Reading data from file {}]".format(directory))
my_dict = dict()
file = open(directory)
count = 0
for line in file:
print(count)
count = count + 1 #I used this to figure out where it is stopping
id, data = line.split()
my_dict[id] = list(map(float, data.split(',')))
file.close()
file_size = os.path.getsize(directory)
if verbose:
print("[Finished reading {} GB in {} seconds]".format(file_size / 1000000000, round((time.time() - start_time), 3)))
return my_dict
我在Pycharm工作,该程序始终快速读取第一个35mb文件。但是,当读取较大的4gb文件时,该程序始终冻结在条目4188上。
我尝试使用调试器运行,程序运行正常。但是,这需要20GB的交换文件,这似乎是不必要的。我期望最多8gb(4gb读取文件,而4gb容纳字典)。所有这些额外的内存可以用来做什么?我没有运行任何其他程序...
我可以在HTOP中看到86%的内存分配给了虚拟环境。
当我在虚拟环境中运行该进程时,它只会进入2352...。
Ubuntu 18上的Python 3.6 64位