Python的异步编程

news/2024/10/4 7:08:50/

什么是协程?

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

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

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

greenlet,早期模块

yield关键字

asyncio装饰器(python3.4之后)

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

协程的意义

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

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

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

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

异步编程

事件循环

快速上手

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

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

python">async def func():pass
result = func()

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

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

python">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等待)

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

task

future

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

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


http://www.ppmy.cn/news/1533527.html

相关文章

云RDS MySQL迁移至本地MySQL

本地准备工作 1.安装:percona-xtrabackup 上传percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz包到/usr/local tar -zxvf percona-xtrabackup-2.3.9-Linux-x86_64.tar.gz mv percona-xtrabackup-2.3.9-Linux-x86_64 percona-xtrabackup 2.创建数据目录 cd /data/ mkdir rds-mys…

《Spring Boot应用进阶:打造优雅的错误处理机制与全局异常拦截器》

文章目录 自定义异常类AppException封装业务有关的枚举类AppExceptionCodeMsg全局异常拦截器Handler响应类模板Resp案例展示 || Demo项目结构pom依赖DemoController实际执行结果 Demo案例Git地址 | Gitee 本文主要介绍自己在工作中在处理抛出异常类和封装响应类处理的模板总结。…

追梦无Bug的软件世界

追梦无Bug的软件世界:测试人员的视角与探索 我有一个梦想,今天我们共同承载着一个愿景:创造一个没有Bug的软件世界。 我梦想有一天,用户将享受到完全无Bug的软件体验,用户不再因为软件中的Bug而感到困扰和沮丧。 我梦…

C++教程(三):c++常用的配置文件类型

目录 1. INI 文件 2. JSON 文件 3. YAML 文件 4. XML 文件 5. TOML 文件 6. 二进制配置文件(Protocol Buffers, MessagePack, Avro 等) 总结 在 C 项目中,常用的配置文件类型有多种选择,具体选择取决于项目的复杂性、可读性…

ARM Process state -- SPSR

Holds the saved process state for the current mode. 保存当前模式的已保存进程状态。 N, bit [31] Set to the value of PSTATE.N on taking an exception to the current mode, and copied to PSTATE.N on executing an exception return operation in the current mod…

CI/CD详细流程

CI/CD(持续集成/持续交付或持续部署)是一种软件开发实践,旨在通过自动化软件构建、测试和部署的过程,提高开发效率和软件质量。以下是CI/CD流程的详细说明: 1. 持续集成(CI) 持续集成的核心思想…

R包:ggheatmapper热图

加载R包 # devtools::install_github("csgroen/ggheatmapper")library(tidyverse) library(patchwork) library(ggheatmapper)数据 data(tcgaBLCA_ex) gexp <- tcgaBLCA_ex$gexp图1 gghm <- ggheatmap(gexp,hm_colors RdBu,hm_color_values scales::resca…

【Linux】解锁磁盘文件奥秘,高效数据管理的实战技巧

磁盘文件 1. 引言2. 磁盘的机械构成3. 磁盘的物理存储3.1. CHS定位寻址法 4. 磁盘的逻辑存储4.1. LBA地址4.2. inode4.3. 分区、分组4.4. Boot Block4.5. 块组 — Block group4.5.1. inode Table4.5.2. Data Blocks4.5.3. inode Bitmap4.5.4. Block Bitmap4.5.5. GDT4.5.6. Sup…