一、生产者消费者模型

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. 在Linux和Windows系统中输出目录结构

    前言 一直以来就想在写文章时,能以文本形式(而不是截图)附上项目的目录结构,今天终于知道怎么操作了,在这分享一下. Linux 首先说下Linux上输出目录结构的方法. yum安装tree 需要支持t ...

  2. 在linux中用同一个版本的R 同时安装 Seurat2 和 Seurat3

    在linux中用同一个版本的R 同时安装 Seurat 2 和 Seurat 3 Seurat  作为单细胞分析中的重量级R包,有多好用用,用过的人都知道.Seurat 分析流程基本涵盖了单细胞分析中 ...

  3. ubuntu16.04双系统创建分区

    ubuntu安装分区 安装ubuntu 图1:Ubuntu Linux分区向导 如果希望对分区过程进行完全控制,可以使用"其它"选项.单击"继续"按钮,安装向导 ...

  4. Hive 系列(一)—— Hive 简介及核心概念

    一.简介 Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类 SQL 查询功能,用于查询的 SQL 语句会被转化为 MapReduce 作业,然后提交到 ...

  5. gin+vue的前后端分离开源项目

    该项目是gin+vue的前后端分离项目,使用gorm访问MySQL,其中vue前端是使用vue-element-admin框架简单实现的: go后台使用jwt,对API接口进行权限控制.此外,Web页 ...

  6. RDIFramework.NET敏捷开发框架通过SignalR技术整合即时通讯(IM)

    1.引言 即时通讯(IM)是RDIFramework.NET敏捷开发框架全新提供的一个基于Web的即时通讯.内部聊天沟通的工具.界面美观大方对于框架内部进行消息的沟通非常方便.基于RDIFramewo ...

  7. 【Spring Boot】利用 Spring Boot Admin 进行项目监控管理

    利用 Spring Boot Admin 进行项目监控管理 一.Spring Boot Admin 是什么 Spring Boot Admin (SBA) 是一个社区开源项目,用于管理和监视 Spri ...

  8. 常见rpm包和yum包命令

    1.rpm包 在 安装.升级.卸载服务程序时要考虑到其他程序.库的依赖关系,在进行校验.安装. 卸载.查询.升级等管理软件操作时难度都非常大. RPM 机制则为解决这些问题而设计的.RPM 有点像 W ...

  9. strcpy/strncpy/strcpy_s比较

    转载自:http://blog.csdn.net/caomiao2006/article/details/4766416 strcpy()是依据源串的/0作为结束判断的,不检查copy先的Buffer ...

  10. Hive常用函数的使用

    Hive常用函数的使用 文章作者:foochane  原文链接:https://foochane.cn/article/2019062501.html 1 基本介绍 1.1 HIVE简单介绍 Hive ...