通过生成器yield实现单线程的情况下实现并发运算…
2018-06-18 00:03:23来源:未知 阅读 ()
1 #!/usr/bin/env python 2 # -*- coding:utf8 -*- 3 # Author:Dong Ye 4 5 6 ''' 7 定义两个模型: 8 一个是生产包子的。(生成器) 9 另一个是吃包子的。(迭代器) 10 11 这段功能实现了异步IO的雏形,也是一个简单的协程处理方式。 12 协程的特点:实际是串行方式分开执行的,但由于运行效果快,给人的感觉像是并行。 13 因此,协程也叫作:单线程下的并行执行效果。 14 协程是包含在线程里的一个单位,线程时进程的一个单位。 15 例如:enginx在异步单线程下,比多线程要快好多倍,也就是这种效果。 16 ''' 17 18 import time 19 20 21 #吃包子的 22 def consumer(name): 23 print('%s 准备吃包子了!' % name) 24 while True: 25 baozi = yield 26 print("包子[%s]来了。被[%s]吃了!" %(baozi,name)) 27 28 29 #生产包子的 30 def producer(name): 31 #先定义2个协程(消费者)#将函数变成生成器 32 c1 = consumer('A') #2个消费者 33 c2 = consumer('B') #相当于2个协程(进程,线程,协程) 34 #开始调用生成器初始化(准备吃包子) 35 c1.__next__() #开始调用生成器,只有next的时候才会到yield进行下一个操作 36 c2.__next__() 37 print('老子开始吃包子拉!') 38 #循环的次数,每次循环都会传值给生成器(产生什么样的包子) 39 for i in range(10): 40 time.sleep(1) 41 print("做了一个包子,分2半,一人一半") 42 c1.send(i) #包子的类型 43 c2.send(i) 44 45 46 producer("alex") 47 48 49 50 ''' 51 #手动做包子: 52 c = consumer("dy") 53 c.__next__() 54 #c.__next__() 55 56 b1 = "韭菜馅" 57 c.send(b1) #调用+传值 58 #c.__next__() #只调用,不传值 59 ''' 60 61 62 63 64 显示结果: 65 A 准备吃包子了! 66 B 准备吃包子了! 67 老子开始吃包子拉! 68 做了一个包子,分2半,一人一半 #任务1 69 包子[0]来了。被[A]吃了! #任务2 70 包子[0]来了。被[B]吃了! #任务3 71 做了一个包子,分2半,一人一半 72 包子[1]来了。被[A]吃了! 73 包子[1]来了。被[B]吃了! 74 做了一个包子,分2半,一人一半 75 包子[2]来了。被[A]吃了! 76 包子[2]来了。被[B]吃了! 77 做了一个包子,分2半,一人一半 78 包子[3]来了。被[A]吃了! 79 包子[3]来了。被[B]吃了! 80 做了一个包子,分2半,一人一半 81 包子[4]来了。被[A]吃了! 82 包子[4]来了。被[B]吃了! 83 做了一个包子,分2半,一人一半 84 包子[5]来了。被[A]吃了! 85 包子[5]来了。被[B]吃了! 86 做了一个包子,分2半,一人一半 87 包子[6]来了。被[A]吃了! 88 包子[6]来了。被[B]吃了! 89 做了一个包子,分2半,一人一半 90 包子[7]来了。被[A]吃了! 91 包子[7]来了。被[B]吃了! 92 做了一个包子,分2半,一人一半 93 包子[8]来了。被[A]吃了! 94 包子[8]来了。被[B]吃了! 95 做了一个包子,分2半,一人一半 96 包子[9]来了。被[A]吃了! 97 包子[9]来了。被[B]吃了!
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:字符串的格式化
- Python学习日记(十) 生成器和迭代器 2019-08-13
- python学习-39 生成器总结 2019-07-24
- python学习-38迭代器和生成器 2019-07-24
- Python-11-生成器 2019-07-24
- python 通过Sybase ASE ODBC Driver访问sybase数据库,无需 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash