Python通过4种方式实现进程数据通信
python提供了4种方式来满足进程间的数据通信
1.使用multiprocessing.Queue可以在进程间通信,但不能在Pool池创建的进程间进行通信
2.使用multiprocessing.Manager.Queue可以在Pool进程池创建的进程间进行通信
3.通过Pipe进行线程间的通信,pipe进程间通信的性能高于Queue,但是它只能在两个进程间进行通信
4.使用Manager类提供的数据结构可以进行进程间的通信
frommultiprocessingimportProcess,Queue,Pool,Manager,Pipe #注意线程间的通信,使用的queue.Queue #fromqueueimportQueue importtime #1.使用multiprocessing.Queue可以在进程间通信 #defproducer(queue): #queue.put('A') #time.sleep(2) # #defconsumer(queue): #time.sleep(2) #data=queue.get() #print(data) # #if__name__=='__main__': #queue=Queue(10) #p=Process(target=producer,args=(queue,)) #c=Process(target=consumer,args=(queue,)) #p.start() #c.start() #p.join() #c.join() #2.使用共享全局变量,在多进程间通信(结论:不行) #defproducer(a): #a+=1 #time.sleep(2) # # #defconsumer(a): #time.sleep(2) #print(a) # #if__name__=='__main__': #a=1 #p=Process(target=producer,args=(a,)) #c=Process(target=consumer,args=(a,)) #p.start() #c.start() #p.join() #c.join() #3.multiprocessing.Queue不能用于multiprocessing.Pool进程池创建的进程间进行通信 #defproducer(queue): #queue.put('A') #time.sleep(2) # # #defconsumer(queue): #time.sleep(2) #data=queue.get() #print("consumer:%s"%data) # # #if__name__=='__main__': ##queue=Queue(10)#这个是使用multiprocessing.Queue,无效 #queue=Manager().Queue(10)#这个是使用multiprocessing.Manager.Queue,可以 #pool=Pool(2) #pool.apply_async(producer,args=(queue,)) #pool.apply_async(consumer,args=(queue,)) #pool.close() #pool.join() #4.通过Pipe进行线程间的通信,pipe进程间通信的性能高于Queue #defproducer(pipe): #pipe.send('admin') # # #defconsumer(pipe): #data=pipe.recv() #print("consumer:%s"%data) # # #if__name__=='__main__': #receive_pipe,send_pipe=Pipe() #"""Pipe只能适应于两个进程间的通信""" #p=Process(target=producer,args=(send_pipe,)) #c=Process(target=consumer,args=(receive_pipe,)) #p.start() #c.start() #p.join() #c.join() #5.进程间通信的其它方式 defadd_data(p_dict,key,value): p_dict[key]=value if__name__=='__main__': progress_dict=Manager().dict()#Manager()类中提供的数据结构都能够做到进程的通信 first_progress=Process(target=add_data,args=(progress_dict,'name','admin',)) second_progress=Process(target=add_data,args=(progress_dict,'age',45,)) first_progress.start() second_progress.start() first_progress.join() second_progress.join() print(progress_dict)#{'age':45,'name':'admin'}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。