原子写入多个文件

Ale*_*x K 2 python database filesystems synchronization atomicity

假设我有一组文件。如何确保写入所有这些文件是原子的。

我考虑过写入临时文件,只有成功写入后,才对每个文件进行原子重命名。但是一次重命名所有文件并不是原子的。另外,如果我们要追加到这些文件中,这将无法扩展到非常大的文件。

取而代之的是,我想到了实施交易,但是那成了一个单独的项目。我意识到这几乎与实现小型数据库有关。

您将如何在Python中做到这一点?

d = FileWriter.open(['file1', 'file2'], 'wb+')
d.write('add hello world to files')
d.close()
Run Code Online (Sandbox Code Playgroud)

确保d.write是原子的,或者如果失败则至少回滚到原始文件。

Ale*_*x K 5

这就是我的想法。首先确保打开已同步,然后执行以下操作:

  1. 写入临时文件:file1〜,file2〜和特殊文件成功〜(必须首先写入)。
  2. 成功写入后,删除文件成功〜。
  3. 将文件重命名为file1和file2。

如果发生故障:

  1. 检查是否成功〜。
  2. 如果是这样,请勿打扰修理。因为未更新文件(没有重命名),所以隐式执行了回滚。
  3. 如果成功〜不存在,则写入后和重命名过程中都将中断。在这种情况下,修复就像将filex〜重命名为filex一样简单。

  • 另外,这有点像回答有关熨烫西装裤的问题时建议只穿蓝色牛仔裤。这不友好,当然也没有帮助。 (2认同)

cmh*_*cmh 0

您可以尝试使用集群来实现您的目标。它可以在 python 中通过fcntl.flock. 请注意,这只是一项建议措施。为了真正保证你想要的,你应该尝试使用支持严格锁定的数据库或文件系统/内核。