簡體   English   中英

Python 多處理未完成所有任務

[英]Python multiprocessing doesn't finish all tasks

我有很多文件需要一些軟件處理。 它們不需要按順序處理。
假設我有 12 個文件並將它們分成三個列表,然后嘗試將這些列表發送到要執行的不同進程:

# import all files
files = glob.glob(src_path + "*.fits")
files_list = [files[0::3], files[1::3], files[2::3]]

num_processors = 3  # Create a pool of processors
p = Pool(processes = num_processors)  # get them to work in parallel
output = pool.map(run2, [f for f in files_list])


def run2(files, *args):
    for ffit in files:
        terminal_astrometry(command)

def terminal_astrometry(command):
    result = subprocess.run(command, stdout=subprocess.PIPE)

問題是有時,程序不會處理所有這些文件,即 11 個文件確實得到處理,但一個沒有。 或者其他時間,9 個完成但 3 個被跳過。 有時它會完成所有任務(處理所有文件)。

本質上,在 run2() function 中,我正在調用我希望在收到的每個文件 run2() function 上並行運行的特定軟件(Astrometry.net)。

EDIT2:我修剪了 run2() function 因為它包含很多與這里的問題無關的計算(統計數據)(至少我認為是這樣)並將其發布在這里。

您的症狀聽起來像是一種競爭條件,但是pool.map阻塞主進程,直到所有任務都完成,所以代碼在所有任務完成之前不會超過該行。 因此,我認為問題可能出在run2 function - 你能發布它的代碼嗎?

編輯:我以前在答案中也有以下文字,現在已經編輯了問題:

您為每個文件調用run2兩次 - 一次與池異步,一次在主進程中。 根據此 function 中的邏輯,這可能是您看到的奇怪行為的原因。

我在 run2() function 中調用的軟件導致了問題。 它試圖在同一個文件中寫入標准輸出,這導致它無法完成所有任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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