Queue队列作用:
- 解耦:使程序直接实现松耦合,修改一个函数,不会有串联关系。
- 提高处理效率:FIFO = 现进先出,LIFO = 后入先出。
Queue的使用
import multiprocessing # 创建一个长度为3的队伍 queue = multiprocessing.Queue(5) # 向队列中放值 queue.put(1) queue.put("hehe") queue.put((1, 2, 3)) queue.put([4, 5, 6]) queue.put({"a": 1, "b": 2}) # 队列长度为5,放入第6个数据后,队列就进入了阻塞状态,默认会等待队列取出值后再放入新的值 # queue.put(100) # 当队列已经为空的时候,再次get(),程序进入阻塞状态,等待放入新的值到队列,然后再取 # 队列中取值 value = queue.get() print(value) print("....................")
利用Queue,实现进程间的通信
import multiprocessing import time # 写数据到队列 def write_queue(queue): for i in range(10): # 判断队列是否已满 if queue.full(): print("队列已满") break queue.put(i) print("已写入:", i) time.sleep(0.5) # 从队列中读数据 def read_queue(queue): while True: # 判断队列是否为空 if queue.qsize() == 0: print("队列已空") break value = queue.get() print("已取值:", value) if __name__ == '__main__': # 创建一个空的队列 queue = multiprocessing.Queue(5) # 创建两个进程,分别写数据、读数据 w_process = multiprocessing.Process(target=write_queue, args=(queue,)) r_process = multiprocessing.Process(target=read_queue, args=(queue,)) w_process.start() # join() 优先让写数据的进程执行完,再执行读数据的进程 w_process.join() r_process.start()