防止两个python程序一次写入同一个文件

时间:2014-04-17 08:01:34

标签: python file-io locking

我在群集上并行运行了几次python脚本。所有这些目前都写入相同的输出文件。这似乎导致有缺陷的线条。有没有办法锁定"一个程序写入文件并导致另一个程序等到写入完成后的文件?或者我是否必须使用多个输出文件并在之后将它们联合起来?

1 个答案:

答案 0 :(得分:2)

你可以使用OS locking mechanism.如果你真的想要那个(因为你提到了一个集群,我假设你是在Unix系统上)。问题:

  • 等待时间:一个过程正在写作,其余的都在等待它完成不工作。
  • 传输时间:您的文件将位于您的主目录中,实际位于群集的中心节点上。每台计算机都必须通过网络发送数据,这比写入磁盘要慢;相关的,如果他们必须写很多。 (这实际上取决于集群的细节)。通常在本地硬盘驱动器上写入更快,然后在完成后将其发送到您的目录。
  • 容易出错:实施的细节很古怪,可能需要一些经验才能正确完成。

如果您确实只想拥有一个文件,我认为您最好的选择是设置一个侦听器进程并将消息从每个节点发送到主节点。这个监听器将有一个可以并行写入的堆栈,因此您不必担心彼此等待的进程。您当然必须确保所有相关进程都处于活动状态且工作正常,并且您可以足够快地写入数据,以便内存不会增长太快。

要实现这一点,您可以选择标准库中的JSON RPC,pyzmq(广泛用于商业生产环境)或MPI(专为高性能计算而设计)。