Python 在分叉进程和读取文件时,我需要关注什么?
我对forking相当陌生,我在一个文件夹中存储了10000多个文件,我正在通过以下方式阅读该文件夹: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.
#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类型的系统 当您分叉一个进程时,两者都可以访问文件描述符。这意味着单个内核数据由两个进程访问。这在你的情况下很糟糕。您可能希望在fork之后打开文件,以便每个进程都有自己的文件访问权限(和偏移) 通常在子进程更改权限(例如web服务器)时,您希望在分叉之前打开文件描述符。父进程作为根用户在端口80上打开一个套接字,然后派生一个子进程,该子进程将侦听指向打开端口80的文件描述符。然后,子进程可以转到普通用户(而不是root用户)并继续接受新连接 希望有帮助