新闻详情

新闻详情

首页 / 资讯中心 / 详情

同步和异步的核心区别

发布时间:2026/10/28 8:09:53来源:尧图网络
同步和异步的核心区别
同步干完一件之后才能再干下一件事。遇到程序需要等待时程序卡死不动异步当遇到需要等待的事件 异步先去干其他的事件别的事情干完之后再后来干这个事件同步浪费CPU等待时间异步最大优化空闲时间如果用同步代码有人发起请求接口、查询数据库程序就卡死等待新来的请求全部排队 稍微多个请求就会卡顿、超时等问题异步的优势就是单线程就你能处理大量并发请求 不用频繁占用系统资源提升效率Tortoise-ORM集成ORM有以下特点效率高不用手动基础语句 复杂查询可以封装 不用手动拼接语句语法跟友好用python 就能操控数据库不用专门学习复杂的sql语句 对开发者等加友好Tortoise-ORM集成在做异步python 时候 使用ORM有时会卡死 整个程序运行不了 不符合异步开发的理念 而Tortoise-ORM刚好适合异步开发有以下特点原生异步:基于asyncio构建所有数据库操作都是异步的不会阻塞事件循环。Django风格的API:如果你用过Django ORM会发现语法非常熟悉上手极快。轻量级:专注于核心功能没有冗余的抽象层性能出色。完整的关系支持:支持外键、一对一、多对多等所有常见关系类型内置Pydantic 集成:可以通过 pydantic_model_creator 自动从 Tortoise 模型生成 Pydantic模型无缝对接FastAPI的请求/响应校验和传统同步ORM的区别Fastapi的用法getuser_router.get(/all) async def getAllUsers(): dataawait User.all() return {code:1,message:获取所有用户成功,data:data }user_router.get(/all) 括号里面可以自己定义变量名后面可以传值比如 id:int,name:ste 等user_router.get(/all/{id}/{name}) async def getAllUsers(id:int,name:str): dataawait User.all() return {code:1,message:获取所有用户成功,data:data }postuser_router.post(/save,summary保存用户) async def save_user(user: UserCreateRequest): user1await User.create( usernameuser.username, email user.email , phone user.phone, is_admin user.is_admin ) # await User.create(**dict(user)) return {code:1,message:保存用户成功,data:user1}如果是/{name}类型的 那么方法中传的数据变量名要与路径中的变量名相等url……/hello/1/ 路由就相等这个样子 path 可以为变量加约束 如class UserCreateRequest(BaseModel): username: strField( ..., min_length3, max_length50, description用户名, exampleadmin123 ) email: strField( ..., min_length5, max_length100, description邮箱, exampleadmintest.com ) phone: strField( None, min_length11, max_length11, description手机号, example13800138000 ) is_admin: boolField( False, description是否是管理员, exampleFalse )这是添加商品设置字段的的格式和校验下面就是添加的请求体 基本都是必填的 也可以为选填putuser_router.put(/update/{id},summary更新用户) async def update_user(id:int,user: UserCreate): user1 await User.get_or_none(idid) if not user1: return {code:0,message:用户不存在} # 1 # if user.username is not None: # user1.usernameuser.username # if user.email is not None: # user1.emailuser.email # if user.phone is not None: # user1.phoneuser.phone # if user.is_admin is not None: # user1.is_adminuser.is_admin # await user1.save() # 2 # 只把有值的字段变成字典排除掉未提供实际值的字段 # user_dictuser.dict(exclude_unsetTrue) # for key, value in user_dict.items(): # setattr(user1, key, value) # 使用 setattr() 方法动态设置属性 # await user1.save() # 3 user_dictuser.dict(exclude_unsetTrue) await User.filter(idid).update(**user_dict) return {code:1,message:修改成功,data:}修改内容有三个方法方法一user1 await User.get_or_none(idid) if not user1: return {code:0,message:用户不存在} # 1 # if user.username is not None: # user1.usernameuser.username # if user.email is not None: # user1.emailuser.email # if user.phone is not None: # user1.phoneuser.phone # if user.is_admin is not None: # user1.is_adminuser.is_admin # await user1.save() return {code:1,message:修改成功}方法不叫简单但是比较繁琐方法二user_router.put(/update/{id},summary更新用户) async def update_user(id:int,user: UserCreate): user1 await User.get_or_none(idid) if not user1: return {code:0,message:用户不存在} # 只把有值的字段变成字典排除掉未提供实际值的字段 user_dictuser.dict(exclude_unsetTrue) for key, value in user_dict.items(): setattr(user1, key, value) # 使用 setattr() 方法动态设置属性 await user1.save() return {code:1,message:修改成功}只把有值的字段变成字典排除掉未提供实际值的字段方法三user_router.put(/update/{id},summary更新用户) async def update_user(id:int,user: UserCreate): user_dictuser.dict(exclude_unsetTrue) await User.filter(idid).update(**user_dict) return {code:1,message:修改成功}这一块是要修改的内容deleteuser_router.delete(/delete/{id},summary删除用户) async def delete_user(id:int): # 1 # user1 await User.get_or_none(idid) # if user1 is None: # return {code:0,message:用户不存在} # await user1.delete() # 2 await User.filter(idid).delete() return {code:1,message:删除成功}在task中查找id 然后直接调用方法 delete就可以删除了 前面要加一个await挂载才可以使用
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/27 6:27:07

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/27 8:06:52

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/28 6:32:58

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/27 15:44:59

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/27 1:55:44

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/26 21:26:08

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉