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

Python 在分叉进程和读取文件时,我需要关注什么?,python,fork,Python,Fork,我对forking相当陌生,我在一个文件夹中存储了10000多个文件,我正在通过以下方式阅读该文件夹: #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.

我对forking相当陌生,我在一个文件夹中存储了10000多个文件,我正在通过以下方式阅读该文件夹:

#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语句中

在插入以下注释“搜索文件中的术语”的地方,我正在运行一个算法,它覆盖了数千种模式。我希望在循环之前分叉我的进程,这样我就有两个具有不同模式集(不同大小)的进程在同一个文件列表中搜索(或读取)

我的一些关切:

  • 如果一个进程正在读取一个文件,而它的子进程尝试读取该文件,则将执行except,并且搜索算法将永远不会对该特定文件执行
  • 我将无法在两个进程中同时读取同一个文件

  • 因此,在提供了上下文之后,我的问题是,当分叉一个进程并在两个进程之间读取相同的文件时,我需要关注什么?

    我假设是*nix类型的系统

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

    通常在子进程更改权限(例如web服务器)时,您希望在分叉之前打开文件描述符。父进程作为根用户在端口80上打开一个套接字,然后派生一个子进程,该子进程将侦听指向打开端口80的文件描述符。然后,子进程可以转到普通用户(而不是root用户)并继续接受新连接

    希望有帮助