Python协程从零开始到放弃
来源:互联网 发布:怎么从淘宝店铺看电话 编辑:程序博客网 时间:2024/06/03 18:47
Author: lightless@Meili-incDate: 201710110x00 前言很久以前就听说Python的async/await很厉害,但是直到现在都没有用过,一直都在用多线程模型来解决各种问题。最近看到隔壁的Go又很火,所以决定花时间研究下Python协程相关的内容,终于在翻阅了一裤衩的资料之后有了一些理解。0x01 起:一切从生成器开始以往在Python开发中,如果需要进行并...
0x00 前言
0x01 起:一切从生成器开始
def my_range(max_number):
sequence = []
index = 0
while index < max_number:
sequence.append(index)
index += 1
return sequence
def lazy_range(max_number):
index = 0
while index < max_number:
yield index
index += 1
0x02 承:协程诞生
def smart_range(max_number):
index = 0
while index < max_number:
jump = yield index
if jump is None:
jump = 1
index += jump
def lazy_range(max_number):
index = 0
def gratuitous_refactor():
while index < max_number:
yield index
index += 1
yield from gratuitous_refactor()
import asyncio
@asyncio.coroutine
def counttdown(number, n):
while n > 0:
print("T-minus", n, "({})".format(number))
yield from asyncio.sleep(1)
n -= 1
loop = asyncio.get_event_loop()
tasks = [
asyncio.ensure_future(counttdown("A", 2)),
asyncio.ensure_future(counttdown("B", 5)),
]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
你可以对任何
asyncio.Future
的对象进行yield from
,将这个Future对象交给事件循环;暂停执行的协程将等待这个Future的完成;
一旦Future获取到事件循环,并执行完所有的代码;
事件循环感知到Future执行完毕,原暂停的协程会通过send()方法获取Future对象的返回值并且继续执行;
0x03 转:从yield from到await
# python34
@asyncio.coroutine
def py34_function():
yield from work()
# python35
async def py35_function():
await work()
await只能用于async def的函数中;
yield from 不能用于async def的函数中;
result = [i async for i in aiter() if i % 2]
result = [await func() for fun in funcs if await condition()]
async def test(x, y):
for i in range(y):
yield i
await asyncio.sleep(x)
0x04 合:尾声
阅读全文
0 0
- Python协程从零开始到放弃
- selenium从零开始到放弃之疑难杂症总结
- selenium从零开始到放弃之疑难杂症总结
- Python从入门到放弃
- Python从入门到放弃(一):概论
- Python从入门到放弃(五):类细讲
- Python从入门到放弃(一):概论
- Python从入门到放弃(五):类细讲
- Python 从入门到放弃(一)
- Python 从入门到放弃(二)
- Python 从入门到放弃(三)
- Python从入门到放弃(二):核心数据类型
- Python从入门到放弃(三):基本语句和语法
- Python从入门到放弃(四):函数细讲
- Python从入门到放弃(二):核心数据类型
- Python从入门到放弃(三):基本语句和语法
- Python从入门到放弃(四):函数细讲
- 21天Python从入门到放弃(1)
- SASS用法指南
- POJ 2229 Sumsets(基础dp)
- Shader简介
- jQuery获取Select选择的Text和 Value(转)
- 写给所有程序员_你的函数(方法)还好吗?
- Python协程从零开始到放弃
- 陌生的——自媒体发展对企业的影响
- 图片懒加载
- LESS用法指南
- Unity烘焙动态光照实现光源优化
- 关于Spring+Hibernate注解式整合问题
- Unity_Itween插件
- Fiori学习笔记
- Python如何忽略警告