+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-03(49)

2020-04(67)

2020-05(28)

2020-06(46)

2020-07(42)

愚公移山日记·26

发布于2020-04-23 08:26     阅读(734)     评论(0)     点赞(3)     收藏(4)


0

1

2

3

4

5

6

愚公移山日记·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()

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

原文链接:https://blog.csdn.net/python_g_dragon/article/details/105666257

0

1

2

3

4

5

6

7

8

9



所属网站分类: 技术文章 > 博客

作者:天青色等烟雨

链接: https://www.pythonheidong.com/blog/article/339265/f7fdc0cbee51e56e7548/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

3 0
收藏该文
已收藏

评论内容:(最多支持255个字符)