0

我试图了解如何在 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()
4

1 回答 1

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在本例中)。add制作一个将参数传递给( )的包装函数add_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
于 2013-08-07T13:25:36.293 回答