在进程池编程中,还可以使用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
,可以方便地在进程池内部共享数据,并且不需要手动处理锁和同步问题。