一、生产者消费者模型

import multiprocessing

from time import ctime

def consumer(input_q):

    print("Into consumer:",ctime())

    while True:

        #处理项

        item = input_q.get()

        print("pull",item,"out of q")#此处替换为有用的工作

        input_q.task_done()#发出信号通知任务完成

    print("Out of consumer:",ctime()) #此句未执行,因为q.join()收集到四个task_done()信号后,主进程启动

def producer(sequence,output_q):

    print("Into producer:",ctime())

    for item in sequence:

        output_q.put(item)

        print("put",item,"into_q")

    print("Out of producer:",ctime())

#建立进程

if __name__ == "__main__":

    q=multiprocessing.JoinableQueue()

    #运行消费者进程

    cons_p = multiprocessing.Process(target=consumer,args=(q,))

    cons_p.daemon = True

    cons_p.start()

​

    #生产多个项,sequence代表要发送给消费者的项序列

    #在实践中,这可能是生成器的输出或通过一些其他方式生产出来的

    sequence = [1,2,3,4]

    producer(sequence,q)

    #等待所有项被处理

    q.join()

二、协程

1.协程参考资料:

http://python.jobble.com/86481/

http://python.jobble.com/87310/

https://segmentfault.com/a/1190000009781688

2.迭代器参考资料

可迭代(iterable):直接作用于for循环变量

迭代器(Iterator):不但可以作用于for循环,还可以被next调用

3.关系:list是一个典型的可迭代对象,但是不是一个迭代器,因为list不可以被next调用

4.判断标准:通过isinstance来判断某个变量是否是一个实例,判断是否可以迭代

from collections import Iterable,Iterator

​

l = [i for i in range(5)]  #可迭代

print(isinstance(l,Iterable))#判断是否可迭代

print(isinstance(l,Iterator))#判断是否是一个迭代器

​

s_iter = iter(l)#将其转换为可以迭代的和迭代器

print(isinstance(s_iter,Iterable))#判断是否可迭代

print(isinstance(s_iter,Iterator))#判断是否是一个迭代器

三、源码

d26_2_consumer_and_producer_model.py

d27_1_iterable_and_iterator_and_their_transform.py

https://github.com/ruigege66/Python_learning/blob/master/d26_2_consumer_and_producer_model.py

https://github.com/ruigege66/Python_learning/blob/master/d27_1_iterable_and_iterator_and_their_transform.py​

2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)

3.博客园:https://www.cnblogs.com/ruigege0000/

4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

Python连载38-协程、可迭代、迭代器、生产者消费者模型的更多相关文章

  1. 4月25日 python学习总结 互斥锁 IPC通信 和 生产者消费者模型

    一.守护进程 import random import time from multiprocessing import Process def task(): print('name: egon') ...

  2. python中和生成器协程相关yield from之最详最强解释,一看就懂(二)

    一. 从列表中yield  语法形式:yield from <可迭代的对象实例> python中的列表是可迭代的, 如果想构造一个生成器逐一产生list中元素,按之前的yield语法,是在 ...

  3. python中和生成器协程相关的yield之最详最强解释,一看就懂(一)

    yield是python中一个非常重要的关键词,所有迭代器都是yield实现的,学习python,如果不把这个yield的意思和用法彻底搞清楚,学习python的生成器,协程和异步io的时候,就会彻底 ...

  4. 第十一章:Python高级编程-协程和异步IO

    第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...

  5. [转载]Python 3.5 协程究竟是个啥

    http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 协程究 ...

  6. [译] Python 3.5 协程究竟是个啥

    转自:http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 ...

  7. python学习笔记 协程

    在学习异步IO模型前,先来了解协程 协程又叫做微线程,Coroutine 子程序或者成为函数,在所有语言中都是层级调用,比如a调用b,b调用c.c执行完毕返回,b执行完毕返回,最后a执行完毕返回 所以 ...

  8. Python 进阶 之 协程

    协程的概念级描述(与线程对比):转自知乎 链接 线程有两个必须要处理的问题:一是碰着阻塞式I\O会导致整个进程被挂起: 二是由于缺乏时钟阻塞,进程需要自己拥有调度线程的能力. 如果一种实现使得每个线程 ...

  9. Python中异步协程的使用方法介绍

    1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后 ...

随机推荐

  1. Netty源码分析--内存模型(上)(十一)

    前两节我们分别看了FastThreadLocal和ThreadLocal的源码分析,并且在第八节的时候讲到了处理一个客户端的接入请求,一个客户端是接入进来的,是怎么注册到多路复用器上的.那么这一节我们 ...

  2. JVM面试十问

    1. JVM运行时划分哪几个区域?哪些区域是线程共享的?哪些区域是线程独占的? JVM运行时一共划分:程序计数器.虚拟机栈.堆.本地方法栈.方法区. 线程共享的数据区域:堆.方法区. 线程独享的数据区 ...

  3. DotNetCore 3.0 助力 WPF本地化

    概览 随着我们的应用程序越来越受欢迎,我们的下一步将要开发多语言功能.方便越来越多的国家使用我们中国的应用程序, 基于 WPF 本地化,我们很多时候使用的是系统资源文件,可是动态切换本地化,就比较麻烦 ...

  4. 性能测试学习第四天-----loadrunner:jdbc批量制造测试数据 & controller应用

    Javavuser协议 1.过程概述:在eclipse中用java编写sql执行脚本,复制到lr中,调整后通过参数化迭代批量制造测试数据: 2.步骤: 1).在eclipse中新建java proje ...

  5. CSS动效集锦,视觉魔法的碰撞与融合(一)

    前言 在本文中我讲述了7种CSS的动效,它们也许看起来并不惊艳,但是我认为却足够传达本文的理念:编写一些特殊的CSS样式的时候需要不拘于常理,要用特殊的认识角度看待标签和样式属性,从而用「绕个弯」的方 ...

  6. random库的使用

    一.random库介绍 random库是使用随机数的Python标准库 伪随机数:采用梅森旋转算法生成的(伪)随机序列中元素 random库主要用于生成随机数 使用random库:import ran ...

  7. 重新学习MySQL数据库开篇:数据库的前世今生

    本文内容出自刘欣的"码农翻身"公众号,强烈推荐刘欣大大的文章.   数据库的前世今生 小李的数据库之旅 无纸化办公 小李是这个大学计算机科学与技术系的知名学生,他的编程能力了得,使 ...

  8. SpringIoC和SpringMVC的快速入门

    更多内容,欢迎关注微信公众号:全菜工程师小辉~ Spring的优势? 降低了组件之间的耦合性 ,实现了软件各层之间的解耦 可以使用容易提供的众多服务,如事务管理,消息服务等 容器提供单例模式支持 容器 ...

  9. Android Studio启动模拟器失败

    启动Android Studio的模拟器报“Emulator: Process finished with exit code -1073741819 (0xC0000005)”错误教程: 1.进入该 ...

  10. python 04 列表

    1.列表——list [ ] 有序.可变.支持索引查看. 存储数据,支持大多数数据类型:字符串,数字,布尔值.列表.集合.元组.字典等. 1.1 定义: lst(勿用list)  lst = [&qu ...