python多进程异步
异步队列问题
进程池内部传递数据结构
有一个全局管理的Manager需要声明
异步调用必须使用这个SyncManager
单独开进程是同步的,所以不需要SyncManager
注: 队列的put方法和get方法都是阻塞的
import multiprocessing
import os, time, random
def worker(que,duilie=None):
#pid=os.getpid()
#duilie.put(pid)
while True:
print("开始执行,进程号为%d" % (os.getpid()))
if que.full():
print('队列满了----退出进程',os.getpid())
break
print('大小:',que.qsize())
t_stop = random.randint(3, 5)
time.sleep(t_stop)
que.put(t_stop)
def gettext(que,):
while True:
if que.qsize()>0:
time.sleep(1)
print('消耗内容', que.get())
else:
time.sleep(2)
print('等待-队列中的数量',que.qsize())
if __name__ == '__main__':
ks=time.time()
po = multiprocessing.Pool(5) # 定义一个进程池,最 大进程数3
que = multiprocessing.Manager().Queue(5) # 申请队列
duilie=multiprocessing.Manager().Queue(5)
#lock=multiprocessing.Lock()#进程锁
#num=multiprocessing.Value('d',1)#共享变量
for i in range(4):
po.apply_async(worker, args=(que,duilie))
for i in range(1):
po.apply_async(gettext,args=(que,))
time.sleep(3)
# while not duilie.empty():
# print(duilie.get())
print("----start----")
po.close() # 关闭进程池,关闭后po不再接收新的请求
po.join() # 等待po中所有子进程执行完成,必须放在close语句之后
print("-----end-----")
print(time.time()-ks)