并行效果&迭代器
2024-09-06 22:40:40
具体文章: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()
函数获得一个迭代器对象。
最新文章
- 总结项目开发中用到的一些css\html技巧
- Visual Studio 2015无法进行Package Restore的原因和解决方案
- ServerSocket
- 前端手札--meta标记篇
- Javascript DOM基础(二) childNodes、children
- python 基础理解...
- Redis基础知识之————使用技巧(持续更新中.....)
- hiho_1089_floyd最短路
- JavaScript兼容性问题
- CryptoAPI与openssl RSA非对称加密解密(PKCS1 PADDING)交互
- Winform/WPF国际化处理
- [转]理解与使用Javascript中的回调函数
- uistepper on ios versions prior to 5.0
- maven构建geotools应用工程
- Y1吐槽001 怎么做产品
- error_Could not load file or assembly
- Maven 多模块引用版本的问题 java.lang.NoSuchMethodError
- Linux 定位网络不通问题
- 自定义View,随着手指运动的小球
- Django初级手册2-管理界面的使用及定制