调用asyncio.to_thread后上下文依然一致吗

embedded/2024/11/9 16:44:47/

使用Python的asyncio时,可以把一个同步的函数放到线程池中执行从而避免这个函数阻塞asyncio自身的事件循环。比如可以把requests库的请求放进去

python">async def to_thread_do_request(url):return await asyncio.to_thread(requests.get, url)

这个to_thread_do_request方法就不会造成asyncio的阻塞,反而下面这样直接调用一个下面这样把requests.get简单包在一个async函数里则会造成的协程的阻塞

python">async def do_request(url):return requests.get(url)

不过在使用asyncio.to_thread函数时,我们需要注意一点,即asyncio的上下文,也就是通过contextvars来保存的内容通过asyncio.to_thread来执行时与调用者否是一致的?

这个可以大致看一下asyncio.to_thread的实现,我们会发现,对于context来说,这个to_thread会先调用contextvars.copy_context方法把当前的context整体复制到ctx变量中,然后再通过ctx.run来执行其实际任务。这样通过asyncio.to_thread来执行的函数,与调用方的context是一致的,可以放心的把一些需要获取contextvars的工作放在里面跑。


http://www.ppmy.cn/embedded/56266.html

相关文章

【12321骚扰电话举报受理中心-短信验证安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

第二十条:与抽象类相比,优先选择接口

要定义多种实现的类型:JAVA有两种机制:接口和抽象类。这两种机制都支持为某些实例方法提供实现,但二者有个重要的区别:要实现由抽象类定义的类型,这个类必须是抽象类的子类。因为Java只允许单继承,对抽象类…

大数据------JavaWeb------JSP(完整知识点汇总)

JSP 定义 JSP(Java Server Pages),即Java服务端页面。它是一种动态的网页技术,其中可以定义HTML、CSS、JS等静态内容,还可以定义Java代码的动态内容JSP HTML Java 说白了JSP就是一个页面,它既可以写HTML标…

MYSQL substring_index

1.substring_index( 参数1,参数2 ,参数3 ) 2.group by 也可以用我们起的别名来划分,以及起别名可以不用as SELECT IF(profile LIKE %female,female,male) gender,COUNT(*) number FROM user_submitGROUP BY gender; 3.切割、截取、删除、替换 select -- 替换法 r…

uniapp中webSocket使用Https访问连接失败

环境 uniapp写微信小程序,使用webSocket连接后台spring boot通信 在开发环境中使用 ws://xxx 连接正常, 但是微信小程序需要配置https访问,webSocket需要使用 wss:// 来连接, 使用wss:// 域名 访问时,一直连接不上&a…

ffmpeg下载/配置环境/测试

一、下载 1、访问FFmpeg官方网站下载页面:FFmpeg Download Page; 2、选择适合Windows的版本(将鼠标移动到windows端)。通常,你会找到“Windows builds from gyan.dev”或者“BtbN GitHub Releases”等选项&#xff0…

SecureCRT--使用sftp上传和下载文件

原文网址:SecureCRT--使用sftp上传和下载文件_IT利刃出鞘的博客-CSDN博客 简介 本文介绍SecureCRT如何在软件内直接上传和下载文件。 SecureCRT可以用如下两种方法上传和下载文件: 自带的sftp插件服务器安装rz/sz命令 本文介绍第一种方法&#xff0…

编写高效的Java工具类:实用技巧与设计模式

编写高效的Java工具类:实用技巧与设计模式 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 工具类的定义与作用 在软件开发中,工具…