大锤python日记(进程池中使用Queue)

209 阅读1分钟

在进程池编程中,还可以使用Manager模块下的Queue类来实现进程池内部的数据共享。以下是一个使用Manager.Queue的简单示例:

import multiprocessing

def worker(queue):
    while True:
        item = queue.get()
        if item is None:
            break
        print("Processing item {}".format(item))

if __name__ == "__main__":
    # 创建一个进程池
    pool = multiprocessing.Pool()

    # 创建一个Manager对象,并使用其Queue方法创建一个队列
    manager = multiprocessing.Manager()
    queue = manager.Queue()

    # 将队列作为参数传递给worker函数
    pool.apply_async(worker, (queue,))

    # 向队列中添加10个数字
    for i in range(10):
        queue.put(i)

    # 添加特殊标记,表示没有更多的数据了
    queue.put(None)

    # 等待所有任务完成
    pool.close()
    pool.join()

上述代码中,首先创建了一个进程池。然后通过Manager模块下的Queue方法创建了一个队列,将其作为参数传递给worker函数。

在主进程中向队列中添加了10个数字和一个特殊标记,表示没有更多的数据了。进程池中的worker进程会自动从队列中取出数据进行处理。当取到特殊标记时,进程就会退出。最后等待所有任务完成,关闭进程池并退出主进程。

通过使用Manager.Queue,可以方便地在进程池内部共享数据,并且不需要手动处理锁和同步问题。