繁体   English   中英

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

[英]What do I need to be concerned with when forking a process and reading files?

我对分叉还很陌生,我通过执行以下操作将一个文件夹中存储了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. 我将无法同时通过两个进程读取同一文件。

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

我假设使用* nix类型的系统。

派生一个进程时,文件描述符都可以访问。 这意味着两个进程正在访问单个内核数据。 在您的情况下,这很糟糕。 您可能希望在派生之后打开文件以便每个进程都有自己的访问权(并偏移到文件中)。

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

希望有帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM