一、生产者消费者模型

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. ABAP_增强点查找

    *&---------------------------------------------------------------------* *& Report Z_FIND_EN ...

  2. LD_PRELOAD和ld --wrap

    前言 LD_PRELOAD和ld --wrap都能实现不修改原始代码,替换指定函数的实现.通常我们会使用这些方法,替换如malloc)()/free().read()/write()等函数,并在替换函 ...

  3. C语言连接mysql,用GCC编译

    1. main.c文件内容如下 #include <stdlib.h>#include <stdio.h>#include <winsock.h>#include ...

  4. 【数学+思维】ZZULIOJ 1531: 小L的区间求和

    题目链接 题目描述 在给定的一个整数序列中,小L希望找到一个连续的区间,这个区间的和能够被k整除,请你帮小L算一下满足条件的最长的区间长度是多少. 输入 第一行输入两个整数n.k.(1 <= n ...

  5. socket基于TCP(粘包现象和处理)

    目录 6socket套接字 7基于TCP协议的socket简单的网络通信 AF_UNIX AF_INET(应用最广泛的一个) 报错类型 单一 链接+循环通信 远程命令 9.tcp 实例:远程执行命令 ...

  6. Redis总结(九)Linux环境如何安装redis

    以前总结Redis 的一些基本的安装和使用,由于是测试方便,直接用的window 版的reids,并没有讲redis在linux下的安装.今天就补一下Linux环境如何安装redis. 大家可以这这里 ...

  7. HBase的高可用(HA)

    在公司写文档时候查到的一些资料,感觉对自己很有帮助,现在整理如下: 介绍 HBase是一个高可靠性.高性能.列存储.可伸缩.实时读写的分布式数据库系统,基于列的存储模式适合于存储非结构化数据. 适用场 ...

  8. Appium+python自动化(三十四)- 有图有真相,很美很精彩 - 屏幕截图和Android APP类型简介(超详解)

    简介 在实际自动化项目运行过程中,很多时候App可以会出现各种异常,为了更好的定位问题,除了捕捉日志我们还需要对运行时的设备状态来进行截屏.从而达到一种“有图有真相”的效果. 截图方法 方法1 sav ...

  9. There’s More Than One Way To Do It!

    There’s More Than One Way To Do It!

  10. 【改革春风吹满地 HDU - 2036 】【计算几何-----利用叉积计算多边形的面积】

    利用叉积计算多边形的面积 我们都知道计算三角形的面积时可以用两个邻边对应向量积(叉积)的绝对值的一半表示,那么同样,对于多边形,我们可以以多边形上的一个点为源点,作过该点并且过多边形其他点中的某一个的 ...