如何使用Python中的多处理来分割字典中的迭代?
我有一个项目,读取数百万行输入,然后在一个非常大的字典上运行计算。我之前已经在程序的一些IO部分上实现了池/队列技术。但是,是否有一种方法可以使用多处理来划分标准: 对于xdictionary.iteritems()中的i: 谢谢如何使用Python中的多处理来分割字典中的迭代?,python,queue,multiprocessing,pool,Python,Queue,Multiprocessing,Pool,我有一个项目,读取数百万行输入,然后在一个非常大的字典上运行计算。我之前已经在程序的一些IO部分上实现了池/队列技术。但是,是否有一种方法可以使用多处理来划分标准: 对于xdictionary.iteritems()中的i: 谢谢 将多处理导入为mp import multiprocessing as mp def main(): numProcs = mp.cpu_count() qIn, qOut = [mp.Queue() for _ in xrange(2)]
将多处理导入为mp
import multiprocessing as mp
def main():
numProcs = mp.cpu_count()
qIn, qOut = [mp.Queue() for _ in xrange(2)]
procs = [mp.process(target=dowork, args=(qIn, qOut)) for _ in range(numProcs)]
for p in procs: p.start()
for k,v in xdict.iteritems():
qIn.put((k,v))
for _ in xrange(numProcs):
qIn.put(None)
done = 0
while done < numProcs:
res = qOut.get()
if res is None:
done += 1
continue
k,v,ans = res
print "processing", k, v, "gives:", ans
for p in procs: p.terminate()
def dowork(qIn, qOut):
for k,v in iter(qIn.get, None):
answer = doStuff(k,v)
qOut.put((k,v,answer))
qOut.put(None)
def main():
numProcs=mp.cpu\u count()
qIn,qOut=[mp.Queue()表示xrange(2)中的uu]
进程=[mp.process(target=dowork,args=(qIn,qOut)],用于范围内(numProcs)]
对于进程中的p:p.start()
对于xdict.iteritems()中的k,v:
(k,v)
对于x范围内的uu(numProcs):
秦。放(无)
完成=0
完成时
您可以使用imap
:
import multiprocessing
import os
def f(key_value):
print "pid={}, key={}, value={}".format(os.getpid(), *key_value)
pool = multiprocessing.Pool(2)
for _ in pool.imap(f, {1:2, 3:4, 5:6, 7:8}.iteritems()):
pass
输出:
试用
pid=1689, key=1, value=2
pid=1689, key=3, value=4
pid=1689, key=5, value=6
pid=1690, key=7, value=8