2015-01-02 63 views
1

我是相當新的分叉和我有存儲,我做閱讀的文件夾中超過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. 如果一個進程正在讀取一個文件和它的子進程試圖讀取文件時,除將執行和搜索算法將不會執行該特定文件。
  2. 我將無法在兩個進程中同時讀取同一文件。

所以這裏是我提出上下文後的問題,在兩個進程之間分叉進程和讀取相同文件時,我需要關注什麼?

回答

1

我假設一個* nix類型的系統。

當你分叉進程時,文件描述符可以被兩者訪問。這意味着單個內核數據正在被兩個進程訪問。這在你的情況很糟糕。你會想要在之後打開文件,這樣每個進程都有自己的訪問權(並且抵消)到文件中。

當子進程正在更改權限時(例如Web服務器),您希望在之前打開文件描述符。父進程以root用戶的身份在端口80上打開一個套接字,但隨後分派一個子進程,該子進程將監聽指向打開的端口80的文件描述符。子進程然後可以放到普通用戶(而不是root)和繼續接受新的連接。

希望有幫助!

+0

它確實幫助了很多謝謝。 –

相關問題