我对分叉很新,我通过执行以下操作将超过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语句中。
如果插入了以下评论“在文件中搜索条件”,我将运行数千种模式的算法。我希望在循环之前分叉我的进程,这样我就有两个进程可以通过相同的文件列表搜索(或读取)不同的模式集(不同大小)。
我的一些担忧:
因此,在提供上下文之后,这是我的问题,在分支流程和在两个流程之间读取相同文件时,我需要关注什么?
答案 0 :(得分:1)
我假设有一个* nix类型的系统。
当您分叉进程时,两者都可以访问文件描述符。这意味着两个进程正在访问单个内核数据。这对你的情况很糟糕。您可能希望在 fork之后打开文件,这样每个进程都有自己的文件访问权限(和偏移量)。
您希望在分叉之前打开文件描述符,通常是在子进程更改权限时,例如Web服务器。父进程以root用户身份在端口80上打开一个套接字,但是然后分叉一个子进程,该进程将侦听指向打开端口80的文件描述符。然后,子进程可以删除给普通用户(不是root用户)和继续接受新的联系。
希望有所帮助!