Python的异步编程

什么是协程?

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

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

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

greenlet,早期模块

yield关键字

asyncio装饰器(python3.4之后)

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

协程的意义

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

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

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

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

异步编程

事件循环

快速上手

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

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

python 复制代码
async def func():
    pass
result = func()

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

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

python 复制代码
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等待)

python 复制代码
import asyncio

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

task

future

相关推荐
⑩-18 小时前
JUC-场景题
java·开发语言
a程序小傲18 小时前
京东Java面试被问:基于Gossip协议的最终一致性实现和收敛时间
java·开发语言·前端·数据库·python·面试·状态模式
小二·18 小时前
Python Web 开发进阶实战:AI 原生应用商店 —— 在 Flask + Vue 中构建模型即服务(MaaS)与智能体分发平台
前端·人工智能·python
tqs_1234518 小时前
Spring Boot 的自动装配机制和 Starter 的实现原理
开发语言·python
好好学习啊天天向上18 小时前
conda pip更新安装路径,解决C盘容易不够的问题
python·conda·pip·2025yfb3003605
~kiss~18 小时前
多头注意力中的张量重塑
pytorch·python·深度学习
程序员小白条18 小时前
面试 Java 基础八股文十问十答第二十二期
java·开发语言·数据库·面试·职场和发展·毕设
laplace012318 小时前
PPO到GRPO自己话总结
人工智能·python·大模型·agent·rag
编程大师哥18 小时前
JavaScript 和 Python 哪个更适合初学者?
开发语言·javascript·python
aiguangyuan18 小时前
从零构建字符级RNN:用PyTorch实现莎士比亚风格文本生成
人工智能·python·nlp