并行效果&迭代器
具体文章:ALEX的文章 https://www.cnblogs.com/alex3714/articles/5765046.html
串行的并行效果:
import time def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield print("[%s]包子来了,被[%s]吃了!" %(baozi,name)) # c = consumer("小胡胡") #已经变成生成器,接下来每一步都要用next
# c.__next__()
# a1= "鸡肉馅"
# c.send(a1)
# c.__next__() def producer(name):
c = consumer('A') #已经变成迭代器,接下来都要用next
c2 = consumer('B')
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(15):
a = ['茴香鸡蛋','茴香肉','韭菜鸡蛋','韭菜肉','白菜粉条鸡蛋','白菜肉','猪肉大葱',\
'牛肉大葱','羊肉胡萝卜','猪肉芹菜','猪肉菠菜','鸡蛋菠菜韭菜','纯肉馅','香菇肉','酸菜馅']
time.sleep(1)
print("[%s]做了1个\033[31;1m[%s]包子\033[0m,分两半一人一半!"%(name,a[i]))
c.send(a[i])
c2.send(a[i]) producer("Tiger")
运行结果:
A 准备吃包子啦!
B 准备吃包子啦!
老子开始准备做包子啦!
[Tiger]做了1个[茴香鸡蛋]包子,分两半一人一半!
[茴香鸡蛋]包子来了,被[A]吃了!
[茴香鸡蛋]包子来了,被[B]吃了!
[Tiger]做了1个[茴香肉]包子,分两半一人一半!
[茴香肉]包子来了,被[A]吃了!
[茴香肉]包子来了,被[B]吃了!
[Tiger]做了1个[韭菜鸡蛋]包子,分两半一人一半!
[韭菜鸡蛋]包子来了,被[A]吃了!
[韭菜鸡蛋]包子来了,被[B]吃了!
[Tiger]做了1个[韭菜肉]包子,分两半一人一半!
[韭菜肉]包子来了,被[A]吃了!
[韭菜肉]包子来了,被[B]吃了!
[Tiger]做了1个[白菜粉条鸡蛋]包子,分两半一人一半!
[白菜粉条鸡蛋]包子来了,被[A]吃了!
[白菜粉条鸡蛋]包子来了,被[B]吃了!
[Tiger]做了1个[白菜肉]包子,分两半一人一半!
[白菜肉]包子来了,被[A]吃了!
[白菜肉]包子来了,被[B]吃了!
[Tiger]做了1个[猪肉大葱]包子,分两半一人一半!
[猪肉大葱]包子来了,被[A]吃了!
[猪肉大葱]包子来了,被[B]吃了!
[Tiger]做了1个[牛肉大葱]包子,分两半一人一半!
[牛肉大葱]包子来了,被[A]吃了!
[牛肉大葱]包子来了,被[B]吃了!
[Tiger]做了1个[羊肉胡萝卜]包子,分两半一人一半!
[羊肉胡萝卜]包子来了,被[A]吃了!
[羊肉胡萝卜]包子来了,被[B]吃了!
[Tiger]做了1个[猪肉芹菜]包子,分两半一人一半!
[猪肉芹菜]包子来了,被[A]吃了!
[猪肉芹菜]包子来了,被[B]吃了!
[Tiger]做了1个[猪肉菠菜]包子,分两半一人一半!
[猪肉菠菜]包子来了,被[A]吃了!
[猪肉菠菜]包子来了,被[B]吃了!
[Tiger]做了1个[鸡蛋菠菜韭菜]包子,分两半一人一半!
[鸡蛋菠菜韭菜]包子来了,被[A]吃了!
[鸡蛋菠菜韭菜]包子来了,被[B]吃了!
[Tiger]做了1个[纯肉馅]包子,分两半一人一半!
[纯肉馅]包子来了,被[A]吃了!
[纯肉馅]包子来了,被[B]吃了!
[Tiger]做了1个[香菇肉]包子,分两半一人一半!
[香菇肉]包子来了,被[A]吃了!
[香菇肉]包子来了,被[B]吃了!
[Tiger]做了1个[酸菜馅]包子,分两半一人一半!
[酸菜馅]包子来了,被[A]吃了!
[酸菜馅]包子来了,被[B]吃了!
迭代器
可以直接作用于for
循环的数据类型有以下几种:
一类是集合数据类型,如list列表
、tuple元组
、dict字典
、set集合
、str字符串
等;
一类是generator(生成器)
,包括生成器和带yield
的generator function。
这些可以直接作用于for
循环的对象统称为可迭代对象:Iterable
。
而生成器不但可以作用于for
循环,还可以被next()
函数不断调用并返回下一个值,直到最后抛出StopIteration
错误表示无法继续返回下一个值了。
可以被next()
函数调用并不断返回下一个值的对象称为迭代器:Iterator
。
生成器都是Iterator
对象,但list
、dict
、str
虽然是Iterable
,却不是Iterator
。
把list
、dict
、str
等Iterable
变成Iterator
可以使用iter()
函数:
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
小结
- 凡是可作用于
for
循环的对象都是迭代对象
类型; - 凡是可作用于
next()
函数的对象都是迭代器
类型,它们表示一个惰性计算的序列,不运行就不执行; - 集合数据类型如
list
、dict
、str
等是迭代对象但不是迭代器,不过可以通过iter()
函数获得一个迭代器对象。
并行效果&迭代器的更多相关文章
- R︱foreach+doParallel并行+联用迭代器优化内存+并行机器学习算法
要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 接着之前写的并行算法paralle ...
- python迭代器生成器
1.生成器和迭代器.含有yield的特殊函数为生成器.可以被for循环的称之为可以迭代的.而可以通过_next()_调用,并且可以不断返回值的称之为迭代器 2.yield简单的生成器 #迭代器简单的使 ...
- Python学习笔记九:装饰器,生成器,迭代器
装饰器 本质是函数,装饰其他函数,为其他函数添加附加功能 原则: 1不修改原函数的源代码 2不修改原函数的调用方式 知识储备: 1函数即变量 使用门牌号的例子说明函数,调用方式与变量一致 2高阶函数 ...
- python笔记-4(装饰器、生成器、迭代器)
一.熟练掌握装饰器的原理 (在装饰器学习的过程中,查了看了很多资料,个人感觉走了很多的弯路,这个笔记,分享我的理解,希望能帮助到一些人.本文对装饰器的描述,侧重点是条理与逻辑思路,想通过从无到有的方式 ...
- 【python】-- 装饰器、迭代器、生成器
装饰器 装饰器本质是函数,是用来装饰其他函数,顾名思义就是,为其他的函数添加附件功能的. 一.装饰器原则: 不能修改被装饰函数的源代码 不能修改被装饰函数的调用方式 def logging(): pr ...
- Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
- Day4-Python3基础-装饰器、迭代器
今日内容: 1.高阶函数 2.嵌套函数 3.装饰器 4.生成器 5.迭代器 1.高阶函数 定义: a:把一个函数名当作实参传给函数 a:返回值包含函数名(不修改函数的调用方式) import time ...
- Iterator(迭代器)-对象行为型模式
1.意图 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示. 2.别名 Cursor-游标. 3.动机 一个聚合对象,应该提供一种方法来让别人可以访问它的元素,而又不需暴露它的 ...
- 设计模式(十五):Iterator迭代器模式 -- 行为型模式
1.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...
随机推荐
- AAC huffman decoding
在AAC编码器内部,使用huffman coding用于进一步减少scalefactor和量化频谱系数的冗余. 从individual_channel_stream层提取码流进行huffman解码,码 ...
- AJAX--XMLHttpRequest对象
创建XMLHttpRequest对象 XMLHttpRequest是AJAX的基础. 所有现代浏览器(IE7+.Firefox.Chrome.Safari以及Opera)均内建XMLHttpReque ...
- 安全文件传输协议之SFTP的使用
一.SFTP概述 在前几篇文章,我们讲到了文件传输协议FTP(File Transfer Protocol),那也是使用比较广泛的文件服务器,但是我们需要知道,Linux系统并不自带FTP程序 如果要 ...
- docker删除镜像时报错解决办法
报错信息 [root@kvm ~]# docker rmi 4950a54ede5a Error response from daemon: conflict: unable to delete 49 ...
- docker 初识1
学习网址 https://git.oschina.net/yangllsdev/docker-training https://docs.docker.com/engine/installation/ ...
- 第二十三篇 玩转数据结构——栈(Stack)
1.. 栈的特点: 栈也是一种线性结构: 相比数组,栈所对应的操作是数组的子集: 栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶": 向栈中添加元 ...
- 【visio】跨职能流程图
归属于 流程图类别 相比于普通流程图,突出了参与流程的组织.部门之间的联系,形式化地说,它突出的是参与流程的对象之间的联系. 它除了表达基本流程,同时也能展示每个每个流程的归属方,让每个对象明确知道自 ...
- [2020BUAA软工助教]第1次个人作业
热身作业(阅读) 一.前言 我认为人生就是一次次地从<存在>到<光明>. 二.软件工程师的成长 博客索引 同学们在上这门课的时候基本都是大三,觉得在大学里,到教室来听课有意思么 ...
- 其他 - markdown 常用语法
1. 概述 简述 markdown 相关的标记 2. markdown markdown 概述 简单的标记语言 用作快速排版 使用 使用标记对文章样式进行描述 通过专门的引擎读取, 可以展示简单的样式 ...
- python的MySQLdb库基本使用介绍
MySQLdb库 import MySQLdb 简介 提供mysql的基本操作(包括建表,读取表数据,插入数据到表) 数据库操作基本步骤 #!/usr/bin/python # -*- coding: ...