[英]Multiprocessing script gets stuck
我有以下Python代碼:
def workPackage(args):
try:
outputdata = dict()
iterator = 1
for name in outputnames:
outputdata[name] = []
for filename in filelist:
read_data = np.genfromtxt(filename, comments="#", unpack=True, names=datacolnames, delimiter=";")
mean_va1 = np.mean(read_data["val1"])
mean_va2 = np.mean(read_data["val2"])
outputdata[outputnames[0]].append(read_data["setpoint"][0])
outputdata[outputnames[1]].append(mean_val1)
outputdata[outputnames[2]].append(mean_val2)
outputdata[outputnames[3]].append(mean_val1-mean_val2)
outputdata[outputnames[4]].append((mean_val1-mean_val2)/read_data["setpoint"][0]*100)
outputdata[outputnames[5]].append(2*np.std(read_data["val1"]))
outputdata[outputnames[6]].append(2*np.std(read_data["val2"]))
print("Process "+str(identifier+1)+": "+str(round(100*(iterator/len(filelist)),1))+"% complete")
iterator = iterator+1
queue.put (outputdata)
except:
some message
if __name__ == '__main__':
"Main script"
該代碼用於評估大量測量數據。 總共我在多個目錄中獲得了約900個文件(總計約13GB)。 主腳本確定所有文件路徑並將其存儲在4個塊中。 每個塊(文件路徑列表)都分配給一個進程。
try:
print("Distributing the workload on "+str(numberOfProcesses)+" processes...")
for i in range(0,numberOfProcesses):
q[i] = multiprocessing.Queue()
Processes[i] = multiprocessing.Process(target=workPackage, args=(filelistChunks[i], colnames, outputdatanames, i, q[i]))
Processes[i].start()
for i in range(0,numberOfProcesses):
Processes[i].join()
except:
print("Exception while processing stuff...")
之后,從隊列中讀取restul,並將其存儲到輸出文件中。 現在這是我的問題:該腳本啟動了4個進程,每個進程都運行到100%(請參閱workPackage函數中的打印內容)。 他們不會同時完成,但要在大約2分鍾內完成。 但是隨后腳本就停止了。 如果我僅通過剪切文件列表來限制要處理的數據量,則該文件有時會運行到最后,但有時沒有。 我不明白,為什么腳本在所有進程達到100%之后就卡住了。
我真的不知道那里發生了什么。
您使用queue.put()將項目添加到隊列中,然后調用queue.join(),但是我看不到您在哪里調用queue.get()或queue.task_done()。 在隊列為空並且在每個項目上調用task_done()之前,join不會釋放線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.