遇到的异步问题

事例1:

@app.post("/predictfunc")
async def predictfunc(item: Item):
    # 使用asyncio.to_thread()在单独的线程中运行predict_in_thread
    result = 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 = filename
                pic_name=Path(input_path).name
                if 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.mfbz.cn/a/774326.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Git仓库介绍

1. Github GitHub 本身是一个基于云端的代码托管平台,它提供的是远程服务,而不是一个可以安装在本地局域网的应用程序。因此,GitHub 不可以直接在本地局域网进行安装。 简介:GitHub是最流行的代码托管平台,提供了大量…

【Android源码】Gerrit上传Android源码

关于Gerrit的安装参考下面链接 【Android源码】Gerrit安装 要实现上传Android源码,需要经历以下几步: 下载Android代码创建源码仓库创建manifests仓库上传源码其他电脑下载源码 要证明Gerrit中的源码真实可用,肯定是以其他人能真正共享到代…

C++(第五天----多继承、虚继承、虚函数、虚表)

一、继承对象的内存空间 构造函数调用顺序&#xff0c;先调用父类&#xff0c;再调用子类 #include<iostream>using namespace std;//基类 父类 class Base{ public: //公有权限 类的外部 类的内部 Base(){cout<<"Base()"<<endl;}Base(int …

笔记本电脑升级实战手册[2]:清灰换硅脂

文章目录 前言&#xff1a;一、开盖拆卸二、清灰指南1. 电脑内部清灰2. 风扇清灰3. 清理散热铜管 三、更换硅脂总结&#xff1a; 前言&#xff1a; 这是笔记本电脑升级实战手册的第二篇文章&#xff0c;本篇主要是对电脑进行清灰换硅脂的处理的分享&#xff0c;使用电脑是华硕…

晨持绪电商:大学毕业生投资抖音网店怎么样

在这个数字化飞速发展的时代&#xff0c;传统的职业路径已不再是唯一的选择。对于充满激情和创意的大学毕业生来说&#xff0c;投资抖音网店或许是一个颇具前景的选择。 抖音作为一个流量巨大的社交媒体平台&#xff0c;为年轻人提供了一个展示自我、推广产品的绝佳舞台。与传统…

创新引领,构筑产业新高地

在数字经济的浪潮中&#xff0c;成都树莓集团以创新驱动为核心&#xff0c;通过整合行业资源、优化服务、培养数字产业人才等措施&#xff0c;致力于打造产业高地&#xff0c;推动地方经济的高质量发展。 一、创新驱动&#xff0c;引领产业发展 1、引入新技术、新模式&#xf…

平安养老险宿州中心支公司积极参与“78奋力前行”集体健步行活动

7月3日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;宿州中心支公司组织员工参加由宿州市保险行业协会2024年“78奋力前行”线下集体健步行活动。 平安养老险宿州中心支公司员工高举公司旗帜&#xff0c;与同业伙伴一起出发&#xff0…

maven设置阿里云镜像源(加速)

一、settings.xml介绍 settings.xml是maven的全局配置文件&#xff0c;maven的配置文件存在三个地方 项目中的pom.xml&#xff0c;这个是pom.xml所在项目的局部配置文件用户配置&#xff1a;${user.home}/.m2/settings.xml全局配置&#xff1a;${M2_HOME}/conf/settings.xml 优…

数据库国产化之路(一)

数据库国产化之路(一) 1、前言&#xff1a;适配海量数据库过程中的一些记录&#xff0c;备忘用 2、海量数据库基于的pg版本&#xff0c;查看PG_VERSION文件为9.2。 3、MySQL中的IF函数替代&#xff0c;一开始的方案是从网上找了个if函数&#xff0c;后来发现CASE WHEN其实能完成…

手把手教你生成一幅好看的AI图片

很多人看到别人用SD生成出来的图片感到非常的羡慕&#xff0c;因为即使给了他们最好的SD软件&#xff0c;他们也是词穷&#xff0c;不知道该如何去描述要生成的图片。 别急&#xff0c;这篇文章会一步步的教会你怎么才能生成一个好看的AI图片。 跟着我&#xff0c;别走丢。 …

iptables与firewalld

iptables Linux上常用的防火墙软件 1、 防火墙的策略 防火墙策略一般分为两种&#xff0c;一种叫通策略&#xff0c;一种叫堵策略&#xff0c;通策略&#xff0c;默认门是关着的&#xff0c;必须要定义谁能进。堵策略则是&#xff0c;大门是洞开的&#xff0c;但是你必须有身…

从数据到智能,英智私有大模型助力企业实现数智化发展

在数字化时代&#xff0c;数据已经成为企业最重要的资源。如何将这些数据转化为实际的业务价值&#xff0c;是每个企业面临的重要课题。英智利用业界领先的清洗、训练和微调技术&#xff0c;对企业数据进行深度挖掘和分析&#xff0c;定制符合企业业务场景的私有大模型&#xf…

2024年7月最佳免费天气API接口推荐

在我们的日常生活中&#xff0c;天气扮演着一个至关重要的角色&#xff0c;它影响着我们的情绪、健康、日常安排和商业决策。无论是计划一次户外活动、安排农作物种植&#xff0c;还是确保旅行安全&#xff0c;天气信息的准确性和及时性至关重要。随着技术的进步&#xff0c;天…

格式化代码 | 美化JSON、SQL

一、格式化JSON数据 打开Postman&#xff0c;将json数据粘到里面&#xff0c;点击Beautify即可美化代码。 二、格式化SQL 打开Navicat&#xff0c;新建查询&#xff0c;将sql粘进去点击”美化sql“即可。 三、浏览器 在线格式化 使用浏览器上的在线格式化网址。例如&…

android应用的持续构建CI(五)-- 应用管理

一、ER设计 渠道&#xff1a;应用发布的渠道&#xff0c;To B的话&#xff0c;可能是学校、租户等&#xff1b;To C的话&#xff0c;渠道则是不同厂商的应用市场。审核&#xff1a;jenkins构建应用完成后&#xff0c;管理后台生成应用的审核记录。 下面是每个实体详细的字段&a…

聚合支付系统主要分账方案及API分析

1 常见分账场景介绍 分账一般分为线下场景分账和线上场景分账&#xff0c;分账API分为微信&#xff0c;支付宝或其他第三方支付公司、银行。今天我们主要探讨微信、支付宝线上和线下场景分账流程。 微信分账API分为收付通和线下服务商分账&#xff0c;支付宝分账分为互联网平…

AVL许可证状态查询

Adams软件介绍 ADAMS是MSC公司 (现属于海克斯康) 旗下的一款专业的机械系统动力学自动分析软件&#xff0c;可以帮助工程师和设计师快速分析和优化机械系统的运动和力学性能。ADAMS支持多种机械系统的建模和仿真&#xff0c;如汽车、机器人、飞机、机械臂等等&#xff0c;可以模…

Butterfly主题文章标题改成转动小风车

效果 标题级别不同小风车颜色不同&#xff0c;鼠标移入会有转动变慢及变色效果。 新建css 建议在/source下创建诸如img/css/js等文件夹&#xff0c;存放文章或网站用的素材&#xff0c;分门别类后续也方便维护。 Hexo打包的时候&#xff0c;会自动把/source下的文件&#…

直饮水也要烧开饮用吗?

某天上班&#xff0c;同事跟我说他的爸爸喝瓶装水都要烧开了后再喝。 这种行为震惊了小编。 好像很多上一辈的人有种执念&#xff0c;那就是水一定要烧开了喝。 不仅是因为习惯&#xff0c;也是他们的观念已经根深蒂固&#xff0c;认为烧开后的水喝起来才健康。 其实水不一…

MUNIK解读ISO26262--什么是DFA

我们在学习功能安全过程中&#xff0c;经常会听到很多安全分析方法&#xff0c;有我们熟知的FMEA(Failure Modes Effects Analysis)和FTA(Fault Tree Analysis)还有功能安全产品设计中几乎绕不开的FMEDA(Failure Modes Effects and Diagnostic Analysis)&#xff0c;相比于它们…