愚公移山日记·26

愚公移山日记·26

学习进度

今天的主要学习成果是学习多进程,Queue模块,队列的基本用法如下:

'''
队列是multiprocessing模块提供的一个类
创建队列
放值
取值
'''
import multiprocessing

# 创建队列
# 队列是multiprocessing模块提供的一个类
# multiprocessing.Queue(n)表示队列的长度。
queue = multiprocessing.Queue(5)
# 放值
# queue.put(值)
queue.put(1)
queue.put('hello')
queue.put([1, 2, 3])
queue.put((1, 3, 4))
queue.put({'a': 3, 'f': 4})
# 长度为五,当第六个数据进入后,队列进入阻塞状态,默认会等待队列先取出值再放入新的值
# queue.put_nowait()表示放入值,如果已满不再等待,直接报错
# 取值
vaule = queue.get()
print(vaule)
print('__' * 20)
vaule = queue.get()
print(vaule)
print('__' * 20)
vaule = queue.get()
print(vaule)
print('__' * 20)
vaule = queue.get()
print(vaule)
print('__' * 20)

# ------队列已经没有值了--------
# 当对队列已经空的时候,在这get程序进入阻塞状态,等待放入新的值到队列,然后再取。
# vaule = queue.get()
# print(vaule)
# print('__' * 20)
# get_nowait()当队列已空,不会等待放入新的值
vaule = queue.get_nowait()
print(vaule)
print('_____'*10

队列中的判断:

'''
判断是否已满
判断是否为空
取出队


列中的小消息个数
'''
import multiprocessing

#创建一个队列为三的队列
queue = multiprocessing.Queue(3)
queue.put(2)
put = queue.put(1)
queue.put(3)
#判断是否已满
# queue.full() 判断队列是否已经满了 true 为满 false 为不满
isfull = queue.full()
print('isfll------->', isfull)
value = queue.get()
# 取出队列中的消息个数
print('消息个数:', queue.qsize())
value = queue.get()
# 判断是否已经为空 true 为空 fales 为非空
isempty = queue.empty()
print('isempty----->', isempty)

在进程之间也是可用有数据的沟通,需要用到队列来进行进程通信:

import time
import multiprocessing


def write_queue(queue):
    for i in range(10):
        if queue.full():
            print('队列已满')
            break
        queue.put(i)
        print('写入成功:', i)
        time.sleep(1)


def read_queue(queue):
    while True:
        if queue.qsize() == 0:
            print('队列已经空')
            break
        value = queue.get()
        print('已经读取', value)


if __name__ == '__main__':
    # 创建进程池
    pool = multiprocessing.Pool(2)
    # 创建进程池中的队列
    queue = multiprocessing.Manager().Queue(5)

    # 使用进程池执行任务
    # 同步方式/
    #     pool.apply(write_queue, (queue,))
    #     pool.apply(read_queue, (queue,))
    # 异步方式
    result = pool.apply_async(write_queue, (queue,))
    result.wait()
    pool.apply_async(read_queue, (queue,))
    pool.close()
    pool.join()

今天有在思考前两个星期遗留下来的问题,刚好在我一篇文章下今天也有人在问,感觉还是得多下一点功夫。要不我都不好意思回复人家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值