asyncio模块提供了使用协程构建并发应用的工具。它使用一种单线程单进程的方式实现并发,应用的各个部分彼此合作,可以显示的切换任务,一般会在程序阻塞I/O操作的时候发生上下文切换如等待读写文件,或者请求网络。同时asyncio也支持调度代码在将来的某个特定事件运行,从而支持一个协程等待另一个协程完成,以处理系统信号和识别其他一些事件。
对于其他的并发模型大多数采用的都是线性的方式编写。并且依赖于语言运行时系统或操作系统底层的底层线程或进程来适当的改变上下文,而基于asyncio的应用要求应用代码显示的处理上下文切换。asyncio提供的框架以事件循环为中心,程序开启一个无限的循环,程序会把一些函数注册到事件循环当中,当满足事件发生的时候,调用相应的协程函数。
区别
# 普通函数
def defaule(x):
print('参数x值为{}'.format(x))
# 异步函数
import asyncio
async def default1(x):
print('参数x值为{}'.format(x))
由上述2段代码可以看出,异步方法default1()与普通方法default()没有 太大的区别,只是在前面增加了async关键字,async是asynchronous的简写,是为了标记该函数是异步函数, 异步函数只能被异步函数调用,如果被普通函数调用,则会报错,如下段代码:
import asyncio
async def async_demo(x):
return x
def default():
print('异步函数返回值为:{}'.format(async_demo(5)))
if __name__ == "__main__":
default()
运行结果:
C:/Users/jiang.li2/PycharmProjects/untitled3/demo4.py:12: RuntimeWarning: coroutine 'async_demo' was never awaited
rint(async_demo(5))
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
运行上述代码时,异步函数调用和普通函数调