python中的asyncio异步协程怎么实现
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇"python中的asyncio异步协程怎么实现"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一
千家信息网最后更新 2025年01月19日python中的asyncio异步协程怎么实现
这篇"python中的asyncio异步协程怎么实现"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"python中的asyncio异步协程怎么实现"文章吧。
一、定义协程
asyncio 执行的任务,称为协程,但是Asyncio 并不能带来真正的并行
Python 的多线程因为 GIL(全局解释器锁)的存在,也不能带来真正的并行
import asyncio# 通过 async 定义一个协程async def task():print('这是一个协程')# 判断是否是一个协程,返回Trueprint(asyncio.iscoroutinefunction(task))
二、运行协程
import asyncio# 通过 async 定义一个协程async def task(s):print('请等待 {} 秒'.format(s))await asyncio.sleep(s)print('协程结束')# 协程运行loop = asyncio.get_event_loop()loop.run_until_complete(task(3))
三、协程回调
加入我们处理完协程任务后,需要告诉开发人员,这里程序结束了
就需要使用到协程回调
import asyncio# 通过 async 定义一个协程async def task(s):print('请等待 {} 秒'.format(s))await asyncio.sleep(s)return '这里task结束了,其他的继续吧'def callback(future):print(future.result())future = asyncio.ensure_future(task(3))future.add_done_callback(callback)loop = asyncio.get_event_loop()loop.run_until_complete(future)# 结果如下:# 请等待 3 秒# 这里task结束了,其他的继续吧
四、运行多个协程
常常同一个项目中有多个协程
需要借助
asyncio.gather
函数运行
import asyncio# 通过 async 定义一个协程async def task1(s):print('请等待 {} 秒'.format(s))await asyncio.sleep(s)print('这里task1结束了')# 通过 async 定义一个协程async def task2(s):print('请等待 {} 秒'.format(s))await asyncio.sleep(s)print('这里task2结束了')# 运行方法一loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.gather(task1(1), task2(3)))# 运行方法二coros = [task1(1), task1(3)]loop.run_until_complete(asyncio.gather(*coros))# 结果如下:# 请等待 1 秒# 请等待 3 秒# 这里task1结束了# 这里task2结束了
五、run_forever
通过
run_until_complete
运行协程,协程运行完,程序也就结束退出了使用
run_forever
运行,程序并不会退出,除非调用loop.stop()
import asyncio# 通过 async 定义一个协程async def task(s):await asyncio.sleep(s)# 程序并未退出结束loop = asyncio.get_event_loop()asyncio.ensure_future(task(3))loop.run_forever()
如果想让其退出,需要调用
loop.stop()
我们可以在协程中调用
import asyncio# 通过 async 定义一个协程async def task(loop, s):await asyncio.sleep(s)# 关闭run_foreverloop.close()loop = asyncio.get_event_loop()asyncio.ensure_future(task(loop, 3))loop.run_forever()
六、多协程中关闭run_forever
单个协程中可以通过在协程中关闭,但是如果是两个以上的协程的时候
如果有一个协程先做完了就stop了,将会导致其他的协程也会异常退出,这肯定是不允许的
所以我们可以在回调函数中进行关闭
import asyncio, functoolsasync def task(x):await asyncio.sleep(x)print('这是协程任务')def callback(loop):loop.stop()loop = asyncio.get_event_loop()future = asyncio.gather(task(1), task(3))future.add_done_callback(functools.partial(callback, loop))loop.run_forever()
以上就是关于"python中的asyncio异步协程怎么实现"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
运行
内容
程序
任务
函数
多个
文章
方法
知识
篇文章
结果
这是
中关
两个
人员
价值
全局
加入我们
单个
可以通过
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
常州网络营销软件开发价钱
网络安全搭建域控制器
网络安全公司盖章
网络安全网络优化
有网络但服务器连接失败
软件开发者大赛感想
苏州新一代服务器哪个厂家质量好
为企业选择合适的服务器
工业软件开发需求书
手机请求服务器失败怎么解决
对数据库的安全保护
数据通信与网络安全的论文
描述一下什么web服务器
江苏信息网络技术应用
服务器托管业务市场大吗
简述网络安全形式
网络安全构成要素有
华为 农行软件开发
达内 360 网络安全
网络安全运维要学什么
林俊杰钢琴谱软件开发
什么情况要用到服务器cpu
提高网络安全防范意识
实业公司网络技术员
关系型数据库不可再分
初中学软件开发工程师
华为云网络安全护航
怎么优化数据库
png转二进制字段在数据库
艾欧尼亚服务器ip