[英]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语句中的原因。
在插入以下注释“在文件中搜索术语”的地方,我在数千种模式上运行一种算法。 我希望在循环之前分叉我的进程,以使我有两个具有不同模式集(不同大小)的进程,它们通过同一文件列表搜索(或读取)。
我的一些担忧:
因此,在提供上下文之后,这是我的问题,当派生一个进程并在两个进程之间读取相同的文件时,我需要关注什么?
我假设使用* nix类型的系统。
派生一个进程时,文件描述符都可以访问。 这意味着两个进程正在访问单个内核数据。 在您的情况下,这很糟糕。 您可能希望在派生之后打开文件,以便每个进程都有自己的访问权(并偏移到文件中)。
您通常希望在子进程更改权限时(例如Web服务器) 在分叉之前打开文件描述符。 父进程以根用户身份在端口80上打开一个套接字,然后派生一个子进程,该子进程将侦听指向打开的端口80的文件描述符。然后,子进程可以下降到普通用户(而非root),并继续接受新的连接。
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.