【问题标题】:Obtain results from processes using python multiprocessing使用 python 多处理从进程中获取结果
【发布时间】:2013-08-07 12:52:29
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 multiprocessing


    【解决方案1】:

    不使用队列,使用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
    

    【讨论】:

    • 感谢您的回复。 Pool 的一个问题是您不能指定多个参数。但除此之外,它工作得很好。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多