Ethon

为什么要有方法,因为懒惰是一种美德。

   :: 首页  :: 新随笔  ::  ::  :: 管理

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()

 

posted on 2020-07-07 09:54  Ethon  阅读(156)  评论(0编辑  收藏  举报