マルチプロセッシングから単一ファイルへの結果の書き込みに関連するスタック交換に関する多くの投稿があることを知っており、それらの投稿のみを読んだ後にコードを開発しました。私が達成しようとしているのは、「RevMapCoord」関数を並行して実行し、その結果を multiprocess.queue を使用して 1 つのファイルに書き込むことです。しかし、仕事をキューに入れているときに問題が発生しています。私のコード:
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()」の終わりからの print ステートメントを示しています。
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 ()」を実行する前にハングします。コードはエラーを出さず、実行を続けますが、何もしません (ハングします)。私が犯している間違いを教えてください。