我知道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