【问题标题】:Sharing a file among several processes [Perl]在多个进程之间共享文件 [Perl]
【发布时间】:2012-01-22 14:06:24
【问题描述】:

我有一个更新 CSV 文件(单个)的应用程序,CSV 正在从多个进程中随机更新,我猜如果两个进程尝试同时更新它(添加一行...),我猜有些数据会丢失,或者被覆盖(?)。

避免这种情况的最佳方法是什么?

谢谢,

【问题讨论】:

  • 听起来您更愿意使用某种数据库。如果您真的想继续使用 CSV,我建议您使用 flock(),但您必须重写您的流程才能等待文件可用。

标签: perl process ipc


【解决方案1】:

如果您想要一种简单的手动方式来处理文件锁定。

1) As soon as a process opens the csv, it creates a lock.
  (Lock can be in the form of creating a dummy file. The process has to delete 
  the file(lock) as soon as it is done reading/updating the csv)
2) Have each process check for file lock before trying to update the csv.
 (If dummy file is present, some process is accessing the csv, 
  else it can update the csv)

【讨论】:

    【解决方案2】:

    使用 Perl 的 DBIDBD::CSV driver 来访问您的数据;这将为您处理flocking。 (除非您使用的是 Windows 95 或旧的 Mac OS。)如果您决定稍后切换到 RDBMS,您将做好充分的准备。

    @Fluff 建议的简单flocking 当然也应该没问题。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      • 2013-10-12
      • 2012-04-12
      • 2020-12-05
      相关资源
      最近更新 更多