from multiprocessing import Pool, Queue, Manager
import time
import random
def write(que):
for val in ['A', 'B', 'C', 'D']:
print('开始写入数据%s' % val)
que.put(val)
time.sleep(random.random() * 2)
def read(que):
print('开始读取数据')
time.sleep(1)
while True:
if not que.empty():
print(que.get(True))
time.sleep(random.random())
else:
print('--数据读取完毕--')
break
if __name__ == '__main__':
pool = Pool(2)
# q = Queue() # 当使用进程池时队列必须使用Manager().Queen()来实现,不然程序无法执行成功
q = Manager().Queue()
pool.apply_async(write, args=(q,))
# 如果使用非阻塞的方式实现读/取,那么会取不到数据因为读与取的进程同时执行,会导致取的时候还未写入,则无法取到数据,除非人为
# 的将读进程延后,使写进程尽快结束。不然就只能使用apply堵塞方式来执行
pool.apply_async(read, args=(q,))
pool.close()
pool.join()
print('----执行结束----')