使用python多处理从进程中获取结果

使用python多处理从进程中获取结果,python,python-2.7,multiprocessing,Python,Python 2.7,Multiprocessing,我试图理解如何在Python中使用多处理模块。下面的代码生成四个进程,并在其可用时输出结果。在我看来,对于如何从队列中获得结果,必须有更好的方法;一些方法不依赖于计算队列包含的项目数量,只在项目可用时返回项目,然后在队列为空时正常退出。文档说Queue.empty()方法不可靠。对于如何使用队列中的结果,是否有更好的替代方案 import multiprocessing as mp import time def multby4_wq(x, queue): print "Starti

我试图理解如何在Python中使用多处理模块。下面的代码生成四个进程,并在其可用时输出结果。在我看来,对于如何从队列中获得结果,必须有更好的方法;一些方法不依赖于计算队列包含的项目数量,只在项目可用时返回项目,然后在队列为空时正常退出。文档说Queue.empty()方法不可靠。对于如何使用队列中的结果,是否有更好的替代方案

import multiprocessing as mp
import time


def multby4_wq(x, queue):
    print "Starting!"
    time.sleep(5.0/x)
    a = x*4
    queue.put(a)


if __name__ == '__main__':
    queue1 = mp.Queue()
    for i in range(1, 5):
        p = mp.Process(target=multbyc_wq, args=(i, queue1))
        p.start()
    for i in range(1, 5): # This is what I am referring to as counting again
        print queue1.get()

不使用队列,使用队列怎么样

比如说,

import multiprocessing as mp
import time


def multby4_wq(x):
    print "Starting!"
    time.sleep(5.0/x)
    a = x*4
    return a

if __name__ == '__main__':
    pool = mp.Pool(4)
    for result in pool.map(multby4_wq, range(1, 5)):
        print result
传递多个参数 假设您有一个接受多个参数的函数(
add
,在本例中)。制作一个包装函数,将参数传递给
add
add\u wrapper


谢谢你的回复。Pool的一个问题是不能指定多个参数。但除此之外,它工作得很好。谢谢
import multiprocessing as mp
import time


def add(x, y):
    time.sleep(1)
    return x + y

def add_wrapper(args):
    return add(*args)

if __name__ == '__main__':
    pool = mp.Pool(4)
    for result in pool.map(add_wrapper, [(1,2), (3,4), (5,6), (7,8)]):
        print result