python-day33--进程间通信(IPC)
方式:队列(推荐使用)
一、基本情况
1.可以往队列里放任意类型的数据
2. 队列:先进先出
3.
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
q=Queue(3) #可以设置队列中最多可以进入多少个值,也可以不设置 q.put('first') q.put('second') q.put('third') # q.put('fourht') #当设置最多进入3个值时,第四个值过来时就会卡住,只有当第一值 被取出去的时候,第四个值才会进入 print(q.get()) print(q.get()) print(q.get()) # print(q.get()) #当队列中有三个值,而想去取第四个值的时候,也会卡住,只有队列中进入了第四个值的时候才往下运行
4.生产者消费者模型
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #生产者消费者模型1 2 # from multiprocessing import Process,Queue 3 # import time 4 # import random 5 # import os 6 # def consumer(q): 7 # while True: 8 # res=q.get() 9 # if res is None: 10 # break 11 # time.sleep(random.randint(1,3)) 12 # print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res)) 13 # def producer(q): 14 # for i in range(5): 15 # time.sleep(2) 16 # res='包子%s' %i 17 # q.put(res) 18 # print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 19 # q.put(None) 20 # if __name__ == '__main__': 21 # q=Queue() 22 # #生产者们:厨师们 23 # p1=Process(target=producer,args=(q,)) 24 # 25 # #消费者们:吃货们 26 # p2=Process(target=consumer,args=(q,)) 27 # 28 # p1.start() 29 # p2.start() 30 # p1.join() 31 # p2.join() 32 # print('主') 33 34 35 # #生产者消费者模型2 36 # from multiprocessing import Process,Queue 37 # import time 38 # import random 39 # import os 40 # def consumer(q): 41 # while True: 42 # res=q.get() 43 # if res is None:break 44 # time.sleep(random.randint(1,3)) 45 # print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res)) 46 # 47 # def product_baozi(q): 48 # for i in range(3): 49 # time.sleep(2) 50 # res='包子%s' %i 51 # q.put(res) 52 # print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 53 # 54 # 55 # def product_gutou(q): 56 # for i in range(3): 57 # time.sleep(2) 58 # res='骨头%s' %i 59 # q.put(res) 60 # print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 61 # 62 # 63 # def product_ganshui(q): 64 # for i in range(3): 65 # time.sleep(2) 66 # res='泔水%s' %i 67 # q.put(res) 68 # print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 69 # if __name__ == '__main__': 70 # q=Queue() 71 # #生产者们:厨师们 72 # p1=Process(target=product_baozi,args=(q,)) 73 # p2=Process(target=product_gutou,args=(q,)) 74 # p3=Process(target=product_ganshui,args=(q,)) 75 # 76 # #消费者们:吃货们 77 # p4=Process(target=consumer,args=(q,)) 78 # p5=Process(target=consumer,args=(q,)) 79 # 80 # # p_l=[p1,p2,p3,p4,p5] 81 # # for p in p_l: 82 # # p.start() 83 # # 84 # # for p in p_l: 85 # # p.join() 86 # 87 # 88 # p1.start() 89 # p2.start() 90 # p3.start() 91 # p4.start() 92 # p5.start() 93 # 94 # 95 # p1.join() 96 # p2.join() 97 # p3.join() 98 # q.put(None) 99 # q.put(None) 100 # p4.join() 101 # p5.join() 102 # 103 # print('主') 104 105 106 107 108 # #生产者消费者模型3 109 # from multiprocessing import Process,JoinableQueue 110 # import time 111 # import random 112 # import os 113 # def consumer(q): 114 # while True: 115 # res=q.get() 116 # time.sleep(random.randint(1,3)) 117 # print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res)) 118 # q.task_done() 119 # 120 # def product_baozi(q): 121 # for i in range(5): 122 # time.sleep(2) 123 # res='包子%s' %i 124 # q.put(res) 125 # print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 126 # q.join() 127 # 128 # if __name__ == '__main__': 129 # q=JoinableQueue() 130 # #生产者们:厨师们 131 # p1=Process(target=product_baozi,args=(q,)) 132 # 133 # #消费者们:吃货们 134 # p4=Process(target=consumer,args=(q,)) 135 # p4.daemon=True 136 # 137 # p1.start() 138 # p4.start() 139 # 140 # p1.join() 141 # print('主') 142 # #p2结束了 143 144 145 146 147 #生产者消费者模型4 148 from multiprocessing import Process,JoinableQueue 149 import time 150 import random 151 import os 152 def consumer(q): 153 while True: 154 res=q.get() 155 time.sleep(random.randint(1,3)) 156 print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res)) 157 q.task_done() 158 159 def product_baozi(q): 160 for i in range(3): 161 time.sleep(2) 162 res='包子%s' %i 163 q.put(res) 164 print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 165 q.join() 166 167 def product_gutou(q): 168 for i in range(3): 169 time.sleep(2) 170 res='骨头%s' %i 171 q.put(res) 172 print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 173 q.join() 174 175 def product_ganshui(q): 176 for i in range(3): 177 time.sleep(2) 178 res='泔水%s' %i 179 q.put(res) 180 print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res)) 181 q.join() 182 if __name__ == '__main__': 183 q=JoinableQueue() 184 #生产者们:厨师们 185 p1=Process(target=product_baozi,args=(q,)) 186 p2=Process(target=product_gutou,args=(q,)) 187 p3=Process(target=product_ganshui,args=(q,)) 188 189 #消费者们:吃货们 190 p4=Process(target=consumer,args=(q,)) 191 p5=Process(target=consumer,args=(q,)) 192 p4.daemon=True 193 p5.daemon=True 194 195 p_l=[p1,p2,p3,p4,p5] 196 for p in p_l: 197 p.start() 198 199 p1.join() 200 p2.join() 201 p3.join() 202 203 print('主')