【问题标题】:Reading file in parallel from multiple processes从多个进程并行读取文件
【发布时间】:2014-09-26 00:19:48
【问题描述】:

我正在并行运行多个进程,每个进程都并行读取同一个文件。如果我将进程数增加到 > 15 个左右,看起来某些进程会看到文件的损坏版本。处理这种情况的推荐方法是什么?

更多详情: 并行读取的文件实际上是一个 perl 脚本。多个作业是 python 进程,每个作业都使用不同的输入参数独立地启动这个 perl 脚本。当作业数量增加时,其中一些作业会给出 perl 脚本具有无效语法的错误(这是不正确的)。因此,我怀疑其中一些作业读取了损坏的 perl 脚本版本。

我在 32 核机器上运行所有这些。

【问题讨论】:

  • "看起来有些进程看到了文件的损坏版本" - 两件事:(1) 你的同步逻辑可能有错误。 (2) 它极不可能读取具有多个进程的文件会使它更快,它可能会更慢。
  • 没有任何同步逻辑。正如我所说,这个文件是一个并行启动的 perl 脚本。所以是的,它会更快,因为每个 perl 进程都在处理一个独立的数据集
  • "没有任何同步逻辑" - 你的问题! (我想那么多)。再读一遍我说的话。我并没有说你可能复杂的处理不会更快,我说“它极不可能读取具有多个进程的文件会使它更快(即文件读取部分)”
  • 我对这个并行读取文件的问题不是很熟悉。你能多说一点吗?为什么只有在并行读取数很高(即 10+)时才会出现问题?

标签: parallel-processing filesystems


【解决方案1】:

如果任何进程也在写入文件,那么您需要强制执行一些同步,例如使用全局命名的互斥锁。

如果没有异步写入,我不希望在读取过程中看到损坏。您是否使用“r”访问权限打开文件?如果您仍然遇到问题,可能值得尝试减少读取缓冲区大小。或者调用本机 win32 API 进行文件访问。

祝你好运!

【讨论】:

  • 文件没有被写入。该文件是 myScript.pl,在每个进程中被称为“perl myScript.pl”。大约有 20 个这样的过程。从您所指的意义上说,它不是“阅读”
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 2019-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-12
相关资源
最近更新 更多