在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 从我的角度来看,你应该使用 redisset
或 sorted 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 中获取大数据缺失值的最快方法是啥?
在给定稀疏矩阵数据的情况下,Python 中计算余弦相似度的最快方法是啥?