2014-09-26 66 views
0

我正在並行運行多個進程,並且每個進程並行地讀取同一個文件。它看起來像某些進程看到文件的損壞版本,如果我將進程數量增加到> 15左右。處理這種情況的推薦方式是什麼?從多個進程並行讀取文件

更多詳細信息: 並行讀取的文件實際上是一個perl腳本。多個作業是python進程,每個作業都使用不同的輸入參數獨立啓動此perl腳本。當作業數量增加時,這些作業中的一部分會給出perl腳本語法無效的錯誤(這不是真的)。因此,我懷疑其中一些作業是在損壞的perl腳本中讀取的。

我正在32core機器上運行所有這些。

+0

「它看起來像一些進程看到文件的損壞版本」 - 2件事情:(1)您的同步邏輯中可能有一個錯誤。 (2)不太可能讀取多個進程的文件會使其更快,但可能會更慢。 – 2014-09-26 00:22:05

+0

沒有任何同步邏輯。正如我所說,這個文件是一個perl腳本,並行啓動。所以是的,它會更快,因爲每個perl進程都在獨立數據集上工作 – slash90 2014-09-26 00:26:09

+0

「沒有任何同步邏輯」 - 存在您的問題! (我想的很多)。閱讀我再次說的話。我沒有說你大概複雜的處理速度不會更快,我說「它不太可能讀取多個進程的文件會使它更快(即文件讀取部分)」 – 2014-09-26 00:27:42

回答

-1

如果任何進程也在寫入文件,那麼您需要強制進行一些同步,例如使用全局命名的互斥鎖。

如果沒有異步寫入,我不希望在讀取期間看到損壞。你打開「r」訪問文件嗎?如果您仍然遇到麻煩,可能需要嘗試減少讀取緩衝區大小。或者調用本地的win32 API來訪問文件。

祝你好運!

+0

文件未被寫入。該文件是myScript.pl,在每個進程中被稱爲「perl myScript.pl」。大約有20個這樣的過程。從你所指的意義上說,它不是'讀'的 – slash90 2014-09-26 01:36:12