并行效果&迭代器
具体文章: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.概述 类中的面向对象编程封装应用逻辑.类,就是实例化的对象,每个单独的对象都有一个特定的身份和状态.单独的对象是一种组织代码的有用方法,但通常你会处理一组对象或者集合. 集合不一定是均一的.图形用 ...
随机推荐
- LED Decorative Light Supplier Introduction - LED Track Light Products
LED Decorative Light Supplier introduction: LED track light is a track light with LED as the ligh ...
- IIS7.x经典模式与集成模式
参考文档:http://book.51cto.com/art/200908/146143.htm 个人理解: 经典模式: 在IIS6中aspnet_isapi.dll只是ISAPI的一个实现,对asp ...
- 从ICG cell 在 library 中的定义说起
如Coding 时需要考虑什么样的代码风格会使gating 的效率更高:综合时需要特别设置要插入的gating 类型,每个gating 的fanout 范围,是否可以跨层次,是否需要做physical ...
- jquery获取select多选框选中的文本值
$("#select option:selected").text();
- liunx详解-2
linux安装与配置 安装配置 虚拟机配置1G内存,1核CPU,50G硬盘,网络地址转换(NAT,主机作为路由构建内网) 镜像文件:http://mirror.nsc.liu.se/centos-st ...
- static的使用总结
全局静态变量 全局变量前加上关键字static,全局变量就定义成一个全局静态变量.,全局静态变量存储在静态存储区,在整个程序运行期间一直存在.全局静态变量在程序运行之前就存在. 初始化:未经初始化的全 ...
- opencv:形态学操作-腐蚀与膨胀
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- JetBrains PyCharm 2018.2.1 x64永久激活码
812LFWMRSH-eyJsaWNlbnNlSWQiOiI4MTJMRldNUlNIIiwibGljZW5zZWVOYW1lIjoi5q2j54mIIOaOiOadgyIsImFzc2lnbmVlT ...
- 设置myeclipse控制台输出到文件中
1.// System.setOut(new PrintStream(new FileOutputStream("文件路径"))); 2.选择项目右击找到Run As 选项,选项下 ...
- report_delay_calculation/check_timing/report_annotated_parasitics/report_analysis_coverge
如何debug 一颗cell 或一段net 的delay, 常用的办法是用report_delay_calculation 报这颗cell 或这段net, 会得到形式如下的report, 从该rep ...