Python学习笔记-协程
来源:互联网 发布:专业数据恢复公司 编辑:程序博客网 时间:2024/04/29 03:37
我们都知道为了处理多个任务,我们可以用多进程跟多线程。而当进程或线程过多时系统在这些“程”之间切换就要花费很多的资源,太浪费了。这时候有一个神奇的功能可以在单一的线程间执行很多任务–这种功能叫做协程。
协程听起来高大上,实际上呢我认为就是利用生成器的一些属性,巧妙的实现了把多个线程放到一个线程里运行。
看如下的例子,是一个生产者(produce)-消费者(consumer)模型,把两个线程(生产者,消费者)写成了协程的形式。
def consumer(): r = '' while True: n = yield r print('consumer %s' % n) r = 'ok'def produce(c): c.send(None) n = 0 while n < 5: n = n + 1 print('produce %s' % n) r = c.send(n) print(r) c.close()c = consumer()produce(c)
我们来分析一下程序的执行流程。首先consumer()是一个生成器。
我们从produce函数开始,c.send(None)
类似next(c)作用在于启动生成器。之后进入一个while循环开始执行生产者的功能这都很平常,直到r = c.send(n)
语句,神奇的事情发生了。c.send(n)
使程序转入了consumer()的执行!send中的n参数代表”yield r“这个整体。而在consumer()中有语句n = yield r
这样就把生产者中的n传递给了消费者。
再来看语句r = c.send(c)
其中c.send(c)
是有返回值的,该值就是下一个yield后面面跟的参数,如语句n = yield r
中”r“就是返回值。这样通过yield生产者又接收到了消费者传过来的参数。
这样程序就实现了交替运行,好像有两个线程同时进行一样。
0 0
- Python学习笔记 协程
- Python学习笔记-协程
- 【python】:python学习笔记
- <35>python学习笔记——协程
- Python学习笔记——协程
- Python学习笔记-Python起步
- Python学习笔记-Python基础
- Python学习笔记-Python对象
- Python基本概念--Python学习笔记
- Python学习笔记:Python函数
- python学习笔记-python安装
- Python学习笔记--Python基础
- 【Python】python基础学习笔记
- python学习笔记3
- Python学习笔记
- Boost.Python学习笔记
- python学习笔记1
- python学习笔记2
- Leetcode# 67 Add Binary
- Java集合排序及java集合类详解--(Collection, List, Set, Map)
- 【Android】Sqlite数据库增删改查
- UVA - 1374 Power Calcul
- 页面导出Excel文件总结
- Python学习笔记-协程
- native层获取Android设备电池电量
- Bundle saveInstanceState的作用与重写onSaveInstanceState方法
- 【BZOJ 1148】【CTSC 2008】挂缀【BZOJ 1 148】【CTSC 2008】挂缀
- hdu 1506/poj 2559 Largest Rectangle in a Histogram
- 【基础练习】【棋盘DP】codevs2193 数字三角形ww题解
- Android官网中关于service 介绍的重要记录笔记
- Java(07-28)学习总结
- 获取进程CPU占用率 -- NtQuerySystemInformation