当前位置: 首页 > news >正文

Python的异步编程

什么是协程?

协程不是计算机系统提供,程序员人为创造。

协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。

实现协程有那么几种方法:

greenlet,早期模块

yield关键字

asyncio装饰器(python3.4之后)

async,await关键字(python3.5之后)

协程的意义

在一个线程中如果遇到IO等待时间,线程不会傻等,利用空闲的时候再去干点其他事。

下面是不包含协程的代码示例,也被称为同步,因为发送了下载请求马上返回图片(结果)。

加上协程之后的一个通信形式,是再发送一个请求的时候同步发出另一个请求。这样比较快。

而且也被称为异步,因为发送了下载请求没有马上返回图片(结果)。

异步编程

事件循环

快速上手

协程函数,定义函数的时候async def 函数

协程对象,执行协程函数()得到的协程对象

async def func():pass
result = func()

注意:执行协程函数创建协程对象,函数内部代码不会执行

如果想要运行协程函数内部代码,必须要将协程对象交给事件循环来处理。

import asyncioasync def func():print("叭叭叭")result = func()# python3.7之前的版本写法
loop = asyncio.get_event_loop()
loop.run_until_complete(result)# python3.7之后的版本写法
asyncio.run(result)

await

await+可等待的对象(协程对象、future、task对象 -> IO等待)

import asyncioasync def func():print("来玩呀")response = await.asyncio.sleep(2)print("结束",response)
asyncio.run(func())

task

future

相关文章:

  • 【漏洞复现】金和OA C6 GeneralXmlhttpPage.aspx Sql注入漏洞
  • ARM Process state -- PSTATE
  • ubuntu卸载VSFTPD
  • IDEA使用技巧
  • 学习经验分享【38】YOLOv11解读——最新YOLO版本
  • 第十讲-显示控件QLabel
  • 【艾思科蓝】Vue.js组件开发实战:从零构建高效可复用组件
  • PasteForm最佳CRUD实践,实际案例PasteTemplate详解之3000问(三)
  • Qt开发第一讲
  • Unity 2D RPG Kit 学习笔记
  • 2024年合肥市职业院校技能大赛(中职组)赛 网络安任务书样题
  • 【生成模型】学习笔记
  • Java之线程篇七
  • react(3)
  • 以Flask为基础的虾皮Shopee“曲线滑块验证码”识别系统部署
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • CentOS 7 防火墙操作
  • extjs4学习之配置
  • Making An Indicator With Pure CSS
  • maya建模与骨骼动画快速实现人工鱼
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • PHP那些事儿
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Spring核心 Bean的高级装配
  • Vue2.0 实现互斥
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于字符编码你应该知道的事情
  • 少走弯路,给Java 1~5 年程序员的建议
  • 探索 JS 中的模块化
  • 微信公众号开发小记——5.python微信红包
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • C# - 为值类型重定义相等性
  • zabbix3.2监控linux磁盘IO
  • 带你开发类似Pokemon Go的AR游戏
  • ​比特币大跌的 2 个原因
  • ![CDATA[ ]] 是什么东东
  • # .NET Framework中使用命名管道进行进程间通信
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #、%和$符号在OGNL表达式中经常出现
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (Java入门)抽象类,接口,内部类
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (算法)Travel Information Center
  • (原創) 物件導向與老子思想 (OO)
  • .NET Framework 4.6.2改进了WPF和安全性
  • .net framwork4.6操作MySQL报错Character set ‘utf8mb3‘ is not supported 解决方法
  • .NET_WebForm_layui控件使用及与webform联合使用
  • .Net6支持的操作系统版本(.net8已来,你还在用.netframework4.5吗)
  • .NET程序集编辑器/调试器 dnSpy 使用介绍