西宁网站怎么做seo,科技有限公司注册条件,wordpress定时采集,上海定制网站建设公司哪家好Python 异步编程
异步编程 异步编程是一种编程范式#xff0c;通过非阻塞的方式执行任务#xff0c;允许程序在等待某些操作#xff08;如I/O操作、网络请求、数据库查询等#xff09;完成时#xff0c;继续执行其他任务。这与同步编程#xff08;或阻塞编程#xff09…Python 异步编程
异步编程 异步编程是一种编程范式通过非阻塞的方式执行任务允许程序在等待某些操作如I/O操作、网络请求、数据库查询等完成时继续执行其他任务。这与同步编程或阻塞编程形成对比后者在等待操作完成时会阻塞执行流程直到任务完成才继续执行。
以下是异步编程的一些关键概念和特点
非阻塞执行 在异步编程中当一个任务需要等待某些操作完成时例如等待网络请求的响应程序不会停止执行其他任务而是会继续处理其他任务。回调函数 异步编程经常使用回调函数在等待操作完成后这些回调函数会被执行以处理操作的结果。回调函数允许程序在任务完成后继续执行相应的代码。Promise和Future 许多异步编程模型使用Promise或Future对象来表示将来某个时间点会完成的操作结果。Promise和Future提供了一种管理异步操作结果的方法允许在结果可用时执行相应的代码。协程 协程是异步编程中常用的一种构造允许函数在等待操作完成时暂停执行并在操作完成后恢复执行。Python中的async和await关键字用于定义和控制协程。事件循环 异步编程依赖于事件循环来管理和调度异步任务。事件循环会不断检查和执行已完成的任务并在任务完成后触发相应的回调或恢复协程的执行。
说明异步并不简单的等于并发更精准的表述应该是并发也即多个任务在同一时间段内交替运行而不是同时运行。
asyncio 模块
asyncio 模块是用来编写 并发 代码的库使用 async/await 语法。
asyncio 模块最大特点就是只存在一个线程与 JavaScript 中的 async/await 一样。
asyncio 模块在单线程上启动一个事件循环event loop时刻监听着新进入循环的事件对事件进行处理并不断地重复这个过程直到异步任务结束。 asyncio 模块示例
代码示例
import asyncioasync def count():print(Start)await asyncio.sleep(1)print(End)async def main():# gather()函数的作用是收集能够按照协程的执行顺序保存对应协程的执行结果。await asyncio.gather(count(), count(), count())# run()通常用于脚本或应用程序的入口点用于启动异步操作。
asyncio.run(main())执行示例 也即异步操作能够在单线程的情况下对协程依次执行遇到阻塞的情况就会等待去执行下一个协程并对协程的执行结果进行收集。
FastApi 框架
FastApi 是一个用于构建 API 的现代、快速高性能的 web 框架使用 Python 并基于标准的 Python 类型提示。
FastApi 能够支持异步编程的 async/await 语法。
如下是一个简单的代码示例用户点餐提供了可乐和汉堡在制作汉堡的同时餐厅人员也在制作可乐而不是等待汉堡完成后再去制作可乐如下是这个过程的模拟。
import asyncio
from fastapi import FastAPI
from datetime import datetimeapp FastAPI()async def get_coca(number: int):start datetime.now().strftime(%Y-%m-%d %H:%M:%S)await asyncio.sleep(number)end datetime.now().strftime(%Y-%m-%d %H:%M:%S)return {coca: number, start: start, end: end}async def get_burgers(number: int):start datetime.now().strftime(%Y-%m-%d %H:%M:%S)await asyncio.sleep(number)end datetime.now().strftime(%Y-%m-%d %H:%M:%S)return {burgers: number, start: start, end: end}# 路由地址定义
app.get(/orders)
async def read_orders(burgers: int 0, coca: int 0, consumer: str ):# 这里收集协程的处理结果result await asyncio.gather(get_burgers(burgers), get_coca(coca))return {consumer: consumer, order: result}
接口测试结果 如上就是 Python 异步编程的简单示例主要是相关概念以及模块的使用介绍如果有需要可以查询 asyncio 模块的官方文档或者是 FastAPI 的官方文档尤其是 FastAPI 官网关于 async/await 的章节使用汉堡做了详细的讲述。
参考资料
[1] 并发 async / await https://fastapi.tiangolo.com/zh/async/#_4
[2] Python异步编程入门 https://www.ruanyifeng.com/blog/2019/11/python-asyncio.html
[3] asyncio官方文档 https://docs.python.org/3/library/asyncio.html