文章目录
异步
1、协程
协程不是计算机提供的,是人为创造的。
定义(微线程)
- 用一个线程在代码之间切换执行(是一种用户态内的上下文切换技术)
def fun1():
print(1)
...
print(2)
def fun2():
print(3)
...
print(4)
func1()
func2()
- 正常情况
- 顺序执行
- 执行完func1后再执行func2
- 异步
- 一个线程
- 可以实现在代码间来回切换
- 比如可能先输出1,再输出3,返回去再输出2
- 可以人为的控制
2、实现协程
- greenlet:早期模块
- yield:生成器
- asyncio装饰器
- async、await关键词(主流:python3.5)
2.1 asyncio
@asyncio.coroutine
def func1():
print(1)
# 遇到IO耗时操作,自动切换到tasks中的其他任务
yield from asyncio.sleep(2)
print(2)
@asyncio.coroutine
def func2():
print(3)
# 遇到IO耗时操作,自动切换到tasks中的其他任务
yield from asyncio.sleep(2)
print(4)
定义
- 一个普通函数加上装饰器(@asyncio.coroutine)后就是定义为协程函数
- coroutine:协程的意思
执行方法
- 与普通函数直接调用执行不同
- 协程函数的执行方法
- 定义一个loop
loop = asyncio.get_event_loop()
- 然后把异步函数扔进去里面
loop.run_until_complete(异步函数)
- 多个异步函数时,可以定义一个tasks
- 将两个异步函数放在tasks列表里
- loop中传入tasks即可
tasks = [
asyncio.ensure_future(func1()),
asyncio.ensure_future(func2()