2011-09-16 85 views
1

我有一個腳本,分析文件包含目錄到其他文件,必須打開並閱讀搜索關鍵字。 由於文件數量不斷增加,我想啓用多處理以減少完成作業所需的時間。Python3並行作業與多處理

我正在考慮離開父進程解析包含目錄的文件,並使用子進程來獲取其他文件。因爲在創建子對象之前父對象需要獲取數據,所以它將是一個阻塞架構(父對象必須在調用子對象之前讀取所有文件),而我想向其中一個子對象發送包含目錄的列表每100個結果。

因此,父母繼續解析文件,而孩子在同一時間工作,以找到關鍵字。

我怎麼能這樣做? 如果您需要更多解釋,請問我,我會告訴你更多。

謝謝。

回答

3

我正在考慮離開父進程解析包含目錄的文件,並使用子進程來獲取其他文件。

目錄是一個名稱。父母分析一個列表並向每個孩子提供目錄名稱。對?小孩然後讀取目錄內的文件。

由於父母需要獲得數據之前創建的孩子的這將是一個無阻塞架構(母公司擁有讀取所有文件之前打電話給孩子的),

庵。孩子不讀取目錄內的文件?上面,它說孩子確實讀取文件。家長閱讀大量數據並將其推送給孩子是很愚蠢的。

雖然我想發送給其中一個孩子的列表包含目錄每100個結果。

好吧。這是不同的。現在,您希望父級讀取目錄名稱,讀取一批100個文件名並將文件名發送給子級。好的。這比讀所有的數據都不傻。現在只有100個名字。

因此,父母繼續解析文件,而孩子在同一時間工作,以找到關鍵字。

好的。但是你完全錯過了並行處理的機會。

仔細閱讀multprocessing模塊。

你想要的是兩個隊列和兩種工人。

您的應用程序將構建兩個隊列。它將構建源進程,「獲取批處理」工作進程池和「獲取文件」工作進程池。

  • 來源。這個過程(基本上)是一個讀取原始「包含目錄的文件」的函數。並將每個目錄名稱放入「get batch」隊列中。

  • 獲得批處理。這是一個過程池。每個進程都是一個從「獲取批處理」隊列獲取條目的函數。這是一個目錄名稱。然後它讀取該目錄並將100個文件名的元組排入「獲取文件」隊列。

  • 獲取文件。這是一個過程池。每個進程都是一個從「獲取文件」隊列獲取條目的函數。這是一個包含100個文件的元組。然後它會打開並讀取這100個天知道的文件 - 它們是什麼。

的多模塊的想法是使用工池,所有從隊列得到他們的任務,並把他們的結果到另一個隊列。這些工作人員全部在同一時間運行。

+0

謝謝你這個乾淨的解釋,是的,你是對的。 我正在更仔細地閱讀多處理文檔。 你說的是我想要得到的。 謝謝。 –