博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
# Python学习--协程--asyncio
阅读量:6191 次
发布时间:2019-06-21

本文共 1942 字,大约阅读时间需要 6 分钟。

简介

协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。

协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。

本人也是刚刚开始学习Python,难免有错误与疏漏还望多多指正~(づ ̄3 ̄)づ╭❤~

语法

协程函数

在函数前加async前缀,则表示该函数为协程函数~

import asyncioasync def coroutine(i): pass复制代码

这样 **coroutine(1)**则不再是调用函数,而是返回一个协程对象

判断一个对象是否为协程对象,返回 布尔值~

asyncio.iscoroutine(coroutine(1))复制代码

确保对象为协程对象,若是协程对象则返回,若不是则抛出错误~

ob = asyncio.ensure_future(coroutine(1))复制代码

事件循环

我的理解是这样的~ asyncio通过运行循环来接受事件,进行统一调度,以实现协程的效果~

loop = asyncio.get_event_loop()         #创建循环loop.run_until_complete(coroutine(1))   #添加协程复制代码

这样 协程对象就进行执行了~

协程效果实现

协程要实现的效果之一,就是要实现函数的有序执行~ 当一个函数执行完后,再去执行下面的函数~ 通过await

import asyncio#协程1async def coroutine(i):    print("协程执行 %s" % i)    res = await someFunction()    print("协程%s 返回功能为 %s" % (,res))#协程2async def someFunction():    print("运行部分功能")    await asyncio.sleep(1) #休息1s 模拟耗时操作    return "功能结果"loop = asyncio.get_event_loop()         #创建循环loop.run_until_complete(coroutine(1))   #执行任务复制代码

执行结果如下

协程执行 1运行部分功能返回功能为 功能结果复制代码

回调

当协程方法执行完毕后进行回调~

import asyncio#协程1async def coroutine(i):    print("协程执行 %s" % i)    #回调def callbackFunc(po):    print('执行回调~ ')    loop = asyncio.get_event_loop()         #创建循环ob = asyncio.ensure_future(coroutine(1))ob.add_done_callback(callbackFunc)loop.run_until_complete(ob)     复制代码

运行结果如下,作为回调的函数,需要接受一个传入参数(回调该函数的协程对象~),

协程执行 1执行回调~ 复制代码

多协程对象并发执行~

效果就和多线程并发执行一样~ 下面是示例代码~

import asyncio#协程1async def coroutine(i):    print("协程执行 %s" % i)    res = await someFunction()    print("协程%s 返回功能为 %s" % (i,res))#协程2async def someFunction():    print("运行部分功能")    await asyncio.sleep(1) #休息1s 模拟耗时操作    return "功能结果"loop = asyncio.get_event_loop()         #创建循环coArr = [coroutine(1),coroutine(2),coroutine(3)]ob = asyncio.gather(*coArr)loop.run_until_complete(ob)   #执行任务复制代码

运行效果如下~~~

协程执行 3运行部分功能协程执行 2运行部分功能协程执行 1运行部分功能协程3 返回功能为 功能结果协程2 返回功能为 功能结果协程1 返回功能为 功能结果结束复制代码

结语

本文,是本人对Python学习的内容总结~ 由于初学 难免有遗漏错误,还望多多指正~

转载地址:http://ntrda.baihongyu.com/

你可能感兴趣的文章
运维监控系统Zabbix3.X升级Zabbix4.x
查看>>
自己使用angular实现html中类似title的功能
查看>>
IN(:id)遇到的问题
查看>>
网络状态都正常,ping 网关能ping通,但不正常,出现“?”,并且不能进行域名解析...
查看>>
云智慧监控宝Docker监控功能评测
查看>>
FTP的主动模式(PORT Mode)及被动模式(Passive Mode)
查看>>
<<连载>><<mariadb crash course>>中文笔记
查看>>
我的友情链接
查看>>
ruby on rails 配置mysql 方法
查看>>
对你,我只能这样
查看>>
解读服务器命名规则背后的秘密
查看>>
Centos 6.5编译安装git 2.9.3
查看>>
我的友情链接
查看>>
xtrabackup自动还原
查看>>
机器学习PartII:监督学习和无监督学习
查看>>
我的友情链接
查看>>
Git 系列之四:Git 进阶功能
查看>>
ie8下button 点击跳转到首页问题
查看>>
赛孚耐推“光学认证”令牌
查看>>
5001.课件和视频下载--防火墙并发会话数和网络吞吐量
查看>>