将仅包含数字数据的记录转换为固定格式字符串并将它们写入 Python 中的文件的最快方法是什么?例如,假设record
是一个巨大的列表,由具有属性id
、x
、y
和的对象组成,wt
并且我们经常需要将它们刷新到外部文件中。可以使用以下代码段完成刷新:
with open(serial_fname(), "w") as f:
for r in records:
f.write("%07d %11.5e %11.5e %7.5f\n" % (r.id, r.x, r.y, r.wt))
但是,我的代码花费了太多时间来生成外部文件,而在两次刷新之间做它应该做的事情的时间太少了。
修改原问题:
我在编写一个服务器软件时遇到了这个问题,该软件通过从多个“生产者”系统中提取信息并将对记录集的任何更改实时或近乎实时地转发给“消费者”系统来跟踪全局记录集以预处理的形式。许多消费者系统都是 Matlab 应用程序。
我在下面列出了到目前为止我收到的一些建议(谢谢)以及一些评论:
- 只转储更改,而不是整个数据集:我实际上已经在这样做了。由此产生的变更集仍然很大。
- 使用二进制(或其他更有效的)文件格式:我几乎受到 Matlab 可以合理有效地读取的内容的限制,此外格式应该与平台无关。
- 使用数据库:我实际上是在尝试绕过当前被认为既太慢又太麻烦的数据库解决方案,尤其是在 Matlab 方面。
- 将任务划分为单独的进程:此时转储代码正在其自己的线程中运行。然而,由于 GIL,它仍然使用相同的内核。我想我可以将它移动到完全独立的过程中。