在python中记录实时数据的最快方法是啥,内存损失最少

Posted

技术标签:

【中文标题】在python中记录实时数据的最快方法是啥,内存损失最少【英文标题】:What is the fastest way to record real-time data in python with least memory loss在python中记录实时数据的最快方法是什么,内存损失最少 【发布时间】:2020-03-14 16:27:25 【问题描述】:

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

一种方式:

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 是一个不错的选择。

【问题讨论】:

【参考方案1】:

写信给redis 非常快。您可以在第二个进程中从redis 读取并写入磁盘

【讨论】:

如果提到内存使用问题,我不确定 Redis 是否是一个不错的选择... Redis 在需要时将内存刷新到磁盘 @Belegnar 你能给我一些关于如何有效使用redis的线索吗?对于每一步,我现在都会得到一个一维 np.array 从我的角度来看,你应该使用 redis setsorted set,决定取决于。然后您应该运行两个线程:一个将序列化元素添加到集合中,另一个从集合中弹出并以您需要的方式处理记录。这个链接很有用redis手册redis.io/commands#setpython redis libgithub.com/aio-libs/aioredis【参考方案2】:

我会尝试 SQLite,因为它在磁盘上提供永久存储(-> 不会丢失数据),但它比写入文件更快,如您的问题所示,并且在您不完整的情况下提供更轻松的数据查找上次运行的数据。

调整 JOURNAL_MODE 可以进一步提高性能:https://blog.devart.com/increasing-sqlite-performance.html

【讨论】:

以上是关于在python中记录实时数据的最快方法是啥,内存损失最少的主要内容,如果未能解决你的问题,请参考以下文章

在 python 或 spark 中获取大数据缺失值的最快方法是啥?

对大文件执行 FFT 的最快方法是啥?

发现 2 个表之间不匹配记录的最快方法是啥?

在给定稀疏矩阵数据的情况下,Python 中计算余弦相似度的最快方法是啥?

如何在 hbase 表中获取计数记录?查询记录的最快方法是啥?

从多个文件中读取大数据并在python中聚合数据的最快方法是啥?