运行系统为Linux
进程池中使用队列共享数据
进程池中使用队列共享数据需要使用Manager()内的Queue()方法。
multiprocessing内部的Queue是针对父子进程间使用,而使用进程池,进程池内的进程并不一定会满足父子关系。
queue.Queue()队列
通常用于线程之间,可线程之间共享。
multiprocessing.Queue()队列
通常用于进程之间,可父子进程间数据共享。
线程之间也可用此方法进行线程之间数据共享。
multiprocessing.Manager().Queue()队列
通常用于进程池的进程之间以及进程池与主进程之间,可进程池数据共享。
不可用于非进程池或线程之间。
进程池中使用队列共享数据代码实现demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| import multiprocessing import time
def consumer(queue): while queue.qsize() != 0: try: print(queue.get(block=False)) time.sleep(1) except: time.sleep(1) print("QueueSize: ", queue.qsize())
def productor(queue): for i in range(10): queue.put(i)
queue = multiprocessing.Manager().Queue()
mul_pool = multiprocessing.Pool() mul_pool.apply_async(productor, (queue, )) for i in range(2): print("start") mul_pool.apply_async(consumer, (queue, )) mul_pool.close() mul_pool.join()
|