[英]python multiprocessing. Pool got stuck after long execution
我正在開發一個分析大文件的工具。 為了更快地做到這一點,我在其上引入了多處理,一切似乎都運行正常。為了做到這一點,我使用multiprocessing.pool創建N個線程,並且它們處理我之前創建的不同的工作塊。
pool = Pool(processes=params.nthreads)
for chunk in chunk_list:
pool.apply_async(__parallel_quant, [filelist, chunk, outfilename])
pool.close()
pool.join()
如您所見,這是標准池執行,沒有特殊用途。
最近,當我運行大量數據時,我發現了一個問題。 標准執行需要大約2個小時,有16個線程,但我有一個特殊情況需要大約8個小時,因為它有大量的文件和大小。
問題是,最近我發現當我執行這個案例時,執行運行正常,直到完成,大多數孩子正常完成,除了一個被困住的孩子
<built-in method recv of _multiprocessing.Connection object at remote 0x3698db0>
由於這個孩子沒有完成父母沒有醒來,執行停止。
這種情況只發生在輸入文件非常大的情況下,所以我想知道是否存在任何可能導致此問題的默認超時。
我正在使用python 2.7多處理0.70a1
我的機器是一個centos 7(32核,64GB RAM)
在此先感謝您的幫助
霍爾迪
從多處理編程指南:
避免共享狀態
As far as possible one should try to avoid shifting large amounts of data between processes.
如果必須通過多個進程分割文件處理,最好指導它們如何檢索文件塊而不是自己發送塊。
嘗試將塊偏移量和塊大小傳遞給子進程。 它可以使用open()和seek()從文件中檢索塊。 您會注意到性能的提高以及內存占用的減少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.