gpt4 book ai didi

Python多处理使用队列写入同一个文件

转载 作者:太空狗 更新时间:2023-10-29 21:32:09 26 4
gpt4 key购买 nike

我知道 Stack Exchange 上有很多帖子与将多处理结果写入单个文件有关,我只阅读了这些帖子就开发了我的代码。我想要实现的是并行运行“RevMapCoord”函数并使用 multiprocess.queue 将其结果写入一个文件中。但是我在排队工作时遇到了问题。我的代码:

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 ()”之前挂起。代码没有给出错误并继续运行但什么都不做(挂起)。请告诉我我犯了什么错误。

最佳答案

我认为您应该将您的示例简化为基础知识。例如:

from multiprocessing import Process, Queue

def f(q):
q.put('Hello')
q.put('Bye')
q.put(None)

if __name__ == '__main__':
q = Queue()
p = Process(target=f, args=(q,))
p.start()
with open('file.txt', 'w') as fp:
while True:
item = q.get()
print(item)
if item is None:
break
fp.write(item)
p.join()

这里我有两个进程(主进程,一个p)。 p 将字符串放入由主进程检索的队列中。当主进程发现 None(一个我用来指示:“我完成了”的哨兵)时,它会打破循环。

将其扩展到多个进程(或线程)是微不足道的。

关于Python多处理使用队列写入同一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com