簡體   English   中英

python多處理。 長期執行后,游泳池陷入困境

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM