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

Python的异步编程

什么是协程?

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

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

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

greenlet,早期模块

yield关键字

asyncio装饰器(python3.4之后)

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

协程的意义

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

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

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

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

异步编程

事件循环

快速上手

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

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

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

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

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

import asyncio

async 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 asyncio

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

task

future

python 异步 async/await(进阶详解)_python async-CSDN博客

协程的概念,为什么要用协程,以及协程的使用-CSDN博客

相关文章:

  • MySQL存储和处理XML数据
  • AAA Redis的过期删除策略+缓存雪崩+缓存一致性问题
  • Proxmox使用tc给虚拟机限速,实现不对等网速——浪浪云
  • 【IPv6】IPv6地址格式及地址分类(组播、单播、任播)整理
  • OpenGL ES 之EGL(6)
  • 探索 Android DataBinding:实现数据与视图的完美融合
  • Redis缓存穿透雪崩击穿及解决
  • 有关Python时间戳的计算
  • SpringCloud-基于Docker和Docker-Compose的项目部署
  • K8S部署流程
  • Junit 5 - 理解Mockito,提高UT 覆盖率
  • 《OpenCV》—— 指纹验证
  • 封装轮播图 (因为基于微博小程序,语法可能有些出入,如需使用需改标签)
  • uni-app在线预览pdf
  • Python(三)——列表
  • ansible
  • pytest
  • linux网络编程实战
  • STM32精确控制步进电机
  • uniapp 知识点