<p>我没有看到你的代码片段,我真的可以优化。所以,我认为我们需要做些完全不同的事情来解决你的问题。在</p>
<p>您的问题似乎是您正在咀嚼大量的数据,而将数据格式化为字符串并将字符串写入文件的速度很慢。你说的“flush”意味着你需要定期保存数据。在</p>
<p>您是定期保存所有数据,还是仅保存更改的数据?如果您正在处理一个非常大的数据集,只更改一些数据,并写入所有数据。。。我们可以从这个角度来解决你的问题。在</p>
<p>如果你有一个大的数据集,你想不时地更新它。。。你是数据库的候选人。一个真正的数据库,用C语言编写以提高速度,它将允许您向它抛出大量的数据更新,并使所有记录保持一致的状态。然后,您可以每隔一段时间运行一个“报告”,从中提取记录并写入固定宽度的文本文件。在</p>
<p>换句话说,我建议您将问题分为两个部分:在计算或接收更多数据时逐段更新数据集,并将整个数据集转储为固定宽度的文本格式,以便进一步处理。在</p>
<p>请注意,您实际上可以从数据库生成文本文件,而不必停止正在更新它的Python进程。你会得到一个不完整的快照,但是如果记录是独立的,那就没问题了。在</p>
<p>如果您的进一步处理也是在Python中进行的,那么您可以将数据永远保留在数据库中。不必费心通过固定宽度的文本文件往返数据。我假设您使用的是固定宽度的文本文件,因为很容易再次提取数据以备将来处理。在</p>
<p>如果您使用数据库的思想,请尝试使用PostgreSQL。它是免费的,是一个真正的数据库。要在Python中使用数据库,应该使用ORM。最好的方法之一是SqlAlchemy。在</p>
<p>另一件要考虑的事情是:如果您以固定宽度的文本文件格式保存数据,以便将来在另一个应用程序中解析和使用数据,并且该应用程序既可以读取固定宽度的JSON,也可以使用编写JSON的C模块。它可能不会更快,但可能会更快;您可以对其进行基准测试并查看。在</p>
<p>除上述之外,我唯一的另一个想法是将程序分成“worker”部分和“updater”部分,worker在其中生成更新的记录,updater部分将记录保存到磁盘。也许让他们通过让工人以文本格式将更新的记录放入标准输出进行通信;让更新程序从标准输入中读取并更新其数据记录。与SQL数据库不同,更新程序可以使用字典来存储文本记录;当新记录到达时,它可以简单地更新字典。像这样:</p>
<pre><code>for line in sys.stdin:
id = line[:7] # fixed width: id is 7 wide
records[id] = line # will insert or update as needed
</code></pre>
<p>实际上,您可以让更新程序保留两个字典,并在另一个字典写入磁盘时继续更新其中一个。在</p>
<p>划分为worker和updater是确保worker不会花费所有时间更新的好方法,也是在多个CPU内核之间平衡工作的一个好方法。在</p>
<p>我现在没主意了。在</p>