========异步
#进程池中的Queue ''' 如果要用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue, 与multiprocessing中的Queue不同 ''' from multiprocessing import Manager,Pool import os def write(q): print('write启动') for ch in 'DONGGE': q.put(ch) def read(q): print('read启动') while True: for i in range(6): print('read从write中获取:',q.get()) if __name__=='__main__': print('main Process(%s) start'%os.getpid()) q=Manager().Queue()#Manager中的Queue才能配合Pool po = Pool() # 无穷多进程 #同步 # po.apply(write,args=(q,)) # po.apply(read,args=(q,)) #异步,但是同时处理多进程的任务又使用同一个IO流输出会发生冲突,导致都没有输出数据 po.apply_async(write,args=(q,)) po.apply_async(read,args=(q,)) po.close()#不允许进程池再加新的请求了 print('main Process(%s) end' % os.getpid())
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/apple/PycharmProjects/stage4/Pool/q_p.py
main Process(2558) start
main Process(2558) end
Process finished with exit code 0
========同步
#进程池中的Queue ''' 如果要用Pool创建进程,就需要使用multiprocessing.Manager()中的Queue, 与multiprocessing中的Queue不同 ''' from multiprocessing import Manager,Pool import os def write(q): print('write启动') for ch in 'DONGGE': q.put(ch) def read(q): print('read启动') while True: for i in range(6): print('read从write中获取:',q.get()) if __name__=='__main__': print('main Process(%s) start'%os.getpid()) q=Manager().Queue()#Manager中的Queue才能配合Pool po = Pool() # 无穷多进程 #同步 po.apply(write,args=(q,)) po.apply(read,args=(q,)) #异步,但是同时处理多进程的任务又使用同一个IO流输出会发生冲突,导致都没有输出数据 # po.apply_async(write,args=(q,)) # po.apply_async(read,args=(q,)) po.close()#不允许进程池再加新的请求了 print('main Process(%s) end' % os.getpid())/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 /Users/apple/PycharmProjects/stage4/Pool/q_p.py
main Process(2647) start
write启动
read启动
read从write中获取: D
read从write中获取: O
read从write中获取: N
read从write中获取: G
read从write中获取: G
read从write中获取: E
===这里没有结束,还在阻塞