Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Python中的多处理来分割字典中的迭代?_Python_Queue_Multiprocessing_Pool - Fatal编程技术网

如何使用Python中的多处理来分割字典中的迭代?

如何使用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)]

我有一个项目,读取数百万行输入,然后在一个非常大的字典上运行计算。我之前已经在程序的一些IO部分上实现了池/队列技术。但是,是否有一种方法可以使用多处理来划分标准:

对于xdictionary.iteritems()中的i:

谢谢

将多处理导入为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