我知道Stack Exchange上有很多帖子與將多處理結果寫入單個文件相關,並且在閱讀完這些帖子後我開發了自己的代碼。我試圖實現的是並行運行「RevMapCoord」函數,並使用multiprocess.queue將其結果寫入單個文件中。但是我排隊工作時遇到問題。我的代碼:使用隊列寫入同一文件的Python多重處理
def RevMapCoord(list):
"Read a file, Find String and Do something"
def feed(queue, parlist):
for par in parlist:
print ('Echo from Feeder: %s' % (par))
queue.put(par)
print ('**Feeder finished queing**')
def calc(queueIn, queueOut):
print ('Worker function started')
while True:
try:
par = queueIn.get(block = False)
res = RevMapCoord(final_res)
queueOut.put((par,res))
except:
break
def write(queue, fname):
fhandle = open(fname, "w")
while True:
try:
par, res = queue.get(block = False)
print >>fhandle, par, res
except:
break
fhandle.close()
feedProc = Process(target = feed , args = (workerQueue, final_res))
calcProc = [Process(target = calc , args = (workerQueue, writerQueue)) for i in range(nproc)]
writProc = Process(target = write, args = (writerQueue, sco_inp_extend_geno))
feedProc.start()
print ('Feeder is joining')
feedProc.join()
for p in calcProc:
p.start()
for p in calcProc:
p.join()
writProc.start()
writProc.join()
當我運行這個代碼腳本在「feedProc.start()」步驟時,從屏幕上的最後幾行輸出顯示打印語句從結束「feedProc.start()」:
Echo from Feeder: >AK779,AT61680,50948-50968,50959,6,0.406808,Ashley,Dayne
Echo from Feeder: >AK832,AT30210,1091-1111,1102,7,0.178616,John,Caine
**Feeder finished queing**
但在執行下一行「feedProc.join()」前掛起。代碼沒有錯誤並繼續運行,但什麼都不做(掛起)。請告訴我我正在犯什麼錯誤。
你應該嘗試運行您的示例(它給出了一個錯誤)。這種方式不能在隊列中放置多個項目。實際上你只是把一個項目放在一個列表上。 – Gerrat 2013-05-08 17:27:22
'TypeError:期望一個字符緩衝區對象'我有錯誤:| – nk9 2013-08-05 18:16:11
@ b1- * new *(和正確的,謝謝Gerrat)版本與python 2.7.5和3.2.3一起使用。試一試! – Hernan 2013-08-07 02:08:05