用python记录实时数据的最快方法是什么,内存损失最少

用python记录实时数据的最快方法是什么,内存损失最少,python,database,logging,save,bigdata,Python,Database,Logging,Save,Bigdata,在循环的每一步中,我都有一些数据,我希望这些数据最终保存在我的硬盘上 单向: list = [] for i in range(1e10): list.append(numpy_array_i) pickle.dump(list, open(self.save_path, "wb"), protocol=4) 但我担心:1_因为列表2_而耗尽了内存,如果某个东西崩溃,所有数据都将丢失。 因此,我还想到了一种实时保存数据的方法,例如: file = make_new_csv_or_xl

在循环的每一步中,我都有一些数据,我希望这些数据最终保存在我的硬盘上

单向:

list = []
for i in range(1e10):
    list.append(numpy_array_i)

pickle.dump(list, open(self.save_path, "wb"), protocol=4)
但我担心:1_因为列表2_而耗尽了内存,如果某个东西崩溃,所有数据都将丢失。 因此,我还想到了一种实时保存数据的方法,例如:

file = make_new_csv_or_xlsx_file()
for i in range(1e10):
    file.write_in_a_new_line(numpy_array_i)

对于这一点,我也担心它可能不会这么快,也不确定最好的工具可能是什么。但openpyxl可能是一个不错的选择。

编写到redis相当快。您可以在第二个过程中读取
redis
并将其写入磁盘我会尝试使用SQLite,因为它在磁盘上提供永久存储(->无数据丢失),但它比您的问题中所示的写入文件更快,并且在您上一次运行时有不完整数据的情况下,可以更轻松地查找数据


调整
JOURNAL\u模式可以进一步提高性能:

如果内存使用被提到是一个问题,我不确定Redis是否是一个好的选择……如果needed@Belegnar你能给我一些关于如何有效使用redis的线索吗?对于每个步骤,我都会得到一个一维np.array。从我的角度来看,您应该使用redis
set
sortedset
,这取决于决策。然后您应该运行两个线程:一个线程向集合中添加序列化元素,另一个线程从集合中弹出,并以您需要的方式处理记录。这些链接是有用的redis手册python redis库