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

时间:2013-08-07 12:52:29

标签: python python-2.7 multiprocessing

我试图了解如何在Python中使用多处理模块。下面的代码产生四个进程,并在结果可用时输出结果。在我看来,必须有一个更好的方法来从队列中获得结果;某些方法不依赖于计算Queue包含的项目数,而只是在项目可用时返回项目,然后在队列为空时正常退出。文档说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()

1 个答案:

答案 0 :(得分:2)

如何使用Pool

而不是使用队列

例如,

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)。创建一个包装函数,将参数传递给addadd_wrapper)。

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