遇到的异步问题

事例1:

@app.post("/predictfunc")
async def predictfunc(item: Item):# 使用asyncio.to_thread()在单独的线程中运行predict_in_threadresult = await asyncio.to_thread(predictfunc_main, item)return result

事例2:

@app.post("/remove_watermark_folder/")
async def remove_watermark_folder(folder_paths: FolderPaths):Path(folder_paths.output).mkdir(parents=True, exist_ok=True)tasks = []for filename in Path(folder_paths.input).iterdir():if filename.is_file() and filename.suffix.lower() in ['.jpg', '.png', '.jpeg']:input_path = filenamepic_name=Path(input_path).nameif len(str(input_path))>0:task = asyncio.create_task(remove_watermark(input_path, folder_paths.output+pic_name))tasks.append(task)await asyncio.gather(*tasks)return {"message": "Watermarks removed and images saved successfully."}


问题:

这两种异步有什么区别

事例1:使用asyncio.to_thread

目的

  • 当你的异步函数中需要调用一个阻塞的、不支持异步的同步函数时(比如某些需要CPU密集型计算的任务或库不支持异步IO的情况),asyncio.to_thread是一个非常有用的工具。它允许你将这个同步函数在单独的线程中运行,而不会阻塞主事件循环。

特点

  • predictfunc函数接收一个Item对象作为参数,并使用asyncio.to_thread来调用predictfunc_main函数,这个函数可能是同步的且计算量较大。
  • 使用await等待asyncio.to_thread的结果,这意味着主函数会暂停执行,直到predictfunc_main函数在另一个线程中完成执行。

事例2:使用asyncio.create_taskasyncio.gather

目的

  • 当你的异步函数中需要并行处理多个异步任务时,可以使用asyncio.create_task来创建任务,并使用asyncio.gather来等待所有任务完成。这特别适用于IO密集型任务,如文件读写、网络请求等。

特点

  • remove_watermark_folder函数遍历一个文件夹中的文件,对符合条件的图片文件(如jpg、png、jpeg格式)并行执行去水印操作。
  • 对于每个符合条件的文件,使用asyncio.create_task创建一个去水印的任务(假设remove_watermark是一个异步函数),并将这些任务添加到tasks列表中。
  • 使用await asyncio.gather(*tasks)等待所有去水印任务完成。asyncio.gather会返回一个包含所有任务结果的元组,但在这个例子中,我们并没有直接使用这个结果,而是直接返回了一个表示成功的消息。

总结

  • 事例1适用于需要在异步函数中调用同步函数,且该函数执行时间较长或计算量较大的情况。
  • 事例2适用于需要并行处理多个异步任务,特别是IO密集型任务的情况。

两种写法都利用了Python的异步编程特性来提高程序的效率和响应性,但适用的场景和解决的问题不同。


线程池方式实现异步:

在fastapi中实现异步_fastapi 异步-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/40806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PCL从理解到应用【02】PCL环境安装 | PCL测试| Linux系统

前言 本文介绍在Ubuntu18.04系统中,如何安装PCL。 源码安装方式:pcl版本1.91,vtk版本8.2.0,Ubuntu版本18.04。 安装好后,可以看到pcl的库,在/usr/lib/中; 通过编写C代码,直接调用…

华为路由器静态路由配置(eNSP模拟实验)

实验目标 如图下所示&#xff0c;让PC1ping通PC2 具体操作 配置PC设备ip 先配置PC1的ip、掩码、网关。PC2也做这样的配置 配置路由器ip 配置G0/0/0的ip信息 #进入系统 <Huawei>system-view #进入GigabitEthernet0/0/0接口 [Huawei]int G0/0/0 #设置接口的ip和掩码 […

【UE5.3】笔记7 控制Pawn移动

使用A、D键控制角色左右移动 打开我们的BP_Player蓝图类&#xff0c;选择事件图表&#xff0c;添加我们的控制事件 右键&#xff0c;搜索A keyboard&#xff0c;选择A,如下图&#xff0c;D也是 添加扭矩力 首先我们要把我们的player上的模拟物理选项打开&#xff0c;这样我们…

ChatGPT在Java后端开发中的应用与影响

随着人工智能技术的发展&#xff0c;尤其是OpenAI推出的聊天机器人模型ChatGPT&#xff0c;其强大的自然语言理解和生成能力正在改变着我们的生活和工作方式。在Java后端开发领域&#xff0c;ChatGPT同样有着广泛的应用前景&#xff0c;并且能够为Java后端开发者带来诸多好处。…

Caused by: java.io.IOException: Broken pipe

IO异常&#xff1a;管道破裂。 推荐文章&#xff1a;解决java.io.IOException: Broken pipe的报错

JavaFx基础知识

1.Stage 舞台 如此这样的一个框框&#xff0c;舞台只是这个框框&#xff0c;并不管里面的内容 public void start(Stage primaryStage) throws Exception {primaryStage.setScene(new Scene(new Group()));primaryStage.getIcons().add(new Image("/icon/img.png"))…

【不锈钢酸退作业区退火炉用高温辐射计快速安装】

项目名称 不锈钢酸退作业区退火炉用高温辐射计快速安装 改造实施项目简介项目提出前状况:不锈钢生产过程中,各种型号的不锈钢带钢在退火工艺中对带钢温度的准确性要求很高,带钢温度的检测直接影响带钢的产品质量,不锈钢带钢温度测量依靠的是高温辐射计,其测量的准确性、稳…

【Python机器学习】算法链与管道——通用的管道接口

Pipeline类补单可以用于预处理和分类&#xff0c;实际上还可以将任意数量的估计器连接在一起。例如&#xff0c;我们可以构建一个包含特征提取、特征选择、缩放和分类的管道&#xff0c;总共有4个步骤。同样的&#xff0c;最后一步可以用聚类或回归代替。 对于管道中估计器的唯…

@Validated 根据字段的值不同,动态分组校验

GroupSequenceProvider 配置 作用域只在单个对象的字段里 Data GroupSequenceProvider(value TestProvider.class) public class TestRO {NotNull(message "不能为空",groups ValidatedRemark.A.class)Pattern(regexp "2|3|",message "只能为2,…

vue2使用use注册自定义指令实现权限控制

版本环境 vue的版本是^2.6.12&#xff0c;将会使用到Vue.use()、Vue.directive() 适用环境 页面某些按钮&#xff0c;需要受到当前登录用户的“角色”“权限”的影响&#xff0c;通过store获取角色role和权限permission&#xff0c;通过自定义指令的方式&#xff0c;控制某一…

antd DatePicker日期选择框限制最多选择一年

实现效果 实现逻辑 import React, { useState } from react;const ParentComponent () > {const [dates, setDates] useState(null);const disabledDate (current) > {if (!dates) {return false;}const tooLate dates[0] && current.diff(dates[0], days) &…

Appium自动化测试框架1

电脑的浏览器 手机的浏览器 手机上的app 原生的应用 纯java 手机上的app apk 移动网页应用 纯HTML CSS 手机的浏览器上 电脑的浏览器上 混合应用 java html css python代码 Appium python库 Appium 手机 都是代表本机 0.0.0.0 127.0.0.1 localhost 如何启动app 启动参…

土壤养分化验仪:农业生态与可持续发展

随着现代农业技术的不断进步&#xff0c;土壤养分化验仪在农业生产中扮演着越来越重要的角色。这款高科技设备以其高精度、高效率的特点&#xff0c;为农业生态与可持续发展提供了强有力的支撑。 一、农田土壤监测与管理 农田是土壤养分化验仪最主要的应用场所。通过对农田土壤…

【AI】DeepStream(14):图像分割deepstream-segmentation-test示例演示

【AI】AI学习目录汇总 1、简介 deepstream-segmentation-test示例演示了图像的语义分割。两个配置文件,分别加载U-Net和Res-UNet两种分割模型 unet_output_graph.uffunetres18_v4_pruned0.65_800_data.uffU-Net是一个在生物医学图像分割领域广泛应用的卷积神经网络(CNN),…

集团型企业组织架构复杂,业务线多,如何进行高效费用管控?

企业管理中流行这样一句话&#xff1a;“企业转型&#xff0c;财务先行”。对集团型企业而言&#xff0c;当今的发展形势下&#xff0c;通过财务战略全面转型、最终撬动企业价值提升&#xff0c;是一件难而正确的事情。 集团企业具有经营规模大、产业链多、分支机构多、地域跨度…

地下电子标识器探测仪ED8000选型注意事项

ED8000探测仪是一台集成了多频率、多种ID标识器调制模式、高低灵敏度调节、可读写标识器等全功能、高性能电子标识器探测仪。它有着极高的灵敏度,同时具备良好的噪声抑制能力&#xff0c;不仅适合专业测绘人员&#xff0c;普通操作人员也可以轻松掌握。 ED8000可支持模拟电子标…

洛谷 P1042 [NOIP2003 普及组] 乒乓球

洛谷 P1042 [NOIP2003 普及组] 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革&#xff0c;以推动乒乓球运动在全球的普及。其中 11 11 11 分制改革引起了很大的争议&#xff0c;有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位…

2024亚洲国际餐饮展览会(北京餐饮展|火锅展|预制菜展会)

2024北京餐饮展会&#xff0c;2024北京食材展会&#xff0c;2024北京火锅展会&#xff0c;2024北京火锅食材展会&#xff0c;2024北京预制菜展会&#xff0c;2024北京预制食材展会&#xff0c; 2024亚洲国际餐饮展览会&#xff08;北京餐饮展|火锅展|预制菜展会&#xff09; …

【C语言】刷题笔记 Day2

【笔记】 【1】局部变量不初始化&#xff0c;默认放的随机值。 1 int n0; 2 scanf("%d",&n); //13.141 【2】这里虽然输入的是一个浮点数&#xff0c;但是只取整数部分。 【3】3.156e7 表示的是3.156*10的7次方。 【4】多组输入&#xff0c;保存和不保存…

基于 Windows Server 2019 部署域控服务器

文章目录 前言1. 域控服务器设计规划2. 安装部署域控服务器2.1. 添加 Active Directory 域服务2.2. 将服务器提升为域控制器2.3. 检查域控服务器配置信息 3. 管理域账号3.1. 新建域管理员账号3.2. 新建普通域账号 4. 服务器加域和退域4.1. 服务器加域操作4.2. 服务器退域操作 总…