在分支进程和读取文件时,我需要关注什么?

时间:2015-01-02 18:37:50

标签: python fork

我对分叉很新,我通过执行以下操作将超过10,000个文件存储在我正在阅读的文件夹中:

#loop over all xFiles in a list of files
try:
    f = open(xFile, 'r', encoding="utf8")
    #search through file for terms
    #do other stuff
except:
    #Someone removed the file cannot be found.
    print("\tFile no longer exists:", xFile)
 f.close()

因为我的脚本需要大约45分钟才能运行,并且由于我正在处理的项目的性质,我搜索的文件列表中的文件有时会被移动或删除。这就是为什么我的阅读包含在一个try语句中。

如果插入了以下评论“在文件中搜索条件”,我将运行数千种模式的算法。我希望在循环之前分叉我的进程,这样我就有两个进程可以通过相同的文件列表搜索(或读取)不同的模式集(不同大小)。

我的一些担忧:

  1. 如果一个进程正在读取文件并且其子进程尝试读取该文件,则将执行except,并且将永远不会对该特定文件执行搜索算法。
  2. 我将无法同时读取同一文件。
  3. 因此,在提供上下文之后,这是我的问题,在分支流程和在两个流程之间读取相同文件时,我需要关注什么?

1 个答案:

答案 0 :(得分:1)

我假设有一个* nix类型的系统。

当您分叉进程时,两者都可以访问文件描述符。这意味着两个进程正在访问单个内核数据。这对你的情况很糟糕。您可能希望在 fork之后打开文件,这样每个进程都有自己的文件访问权限(和偏移量)。

您希望在分叉之前打开文件描述符,通常是在子进程更改权限时,例如Web服务器。父进程以root用户身份在端口80上打开一个套接字,但是然后分叉一个子进程,该进程将侦听指向打开端口80的文件描述符。然后,子进程可以删除给普通用户(不是root用户)和继续接受新的联系。

希望有所帮助!