FreeRTOS学习13——任务相关API函数

news2024/11/15 21:06:35

任务相关API函数

  • 任务相关API函数
    • 任务相关API函数介绍
    • 任务相关 API 函数详解
      • 函数 uxTaskPriorityGet()
      • 函数 vTaskPrioritySet()
      • 函数 uxTaskGetSystemState()
      • 函数 vTaskGetInfo()
      • 函数 xTaskGetApplicationTaskTag()
      • 函数 xTaskGetCurrentHandle()
      • 函数 xTaskGetHandle()
      • 函数 xTaskGetIdleTaskHandle()
      • 函数 uxTaskGetStackHighWaterMark()
      • 函数 eTaskGetState()
      • 函数 pcTaskGetName()
      • 函数 xTaskGetTickCount()
      • 函数 xTaskGetTickCountFromISR()
      • 函数 xTaskGetSchedulerState()
      • 函数 uxTaskGetNumberOfTasks()
      • 函数 vTaskList()
      • 函数 vTaskGetRunTimeStats()
      • 函数 vTaskSetApplicationTaskTag()
      • 函数 SetThreadLocalStoragePointer()
      • 函数 GetThreadLocalStoragePointer()

任务相关API函数

任务相关API函数介绍

在 FreeRTOS 官方在线文档的网页页面中,通过查看 API 参考,可以看到官方列出的FreeRTOS 任务相关的 API 函数,如下图所示:
在这里插入图片描述

以上部分 FreeRTOS 任务相关的 API 函数描述,如下表所示:

函数描述
uxTaskPriorityGet()获取任务优先级
vTaskPrioritySet()设置任务优先级
uxTaskGetSystemState()获取所有任务的状态信息
vTaskGetInfo()获取单个任务的状态信息
xTaskGetApplicationTaskTag()获取任务 Tag
xTaskGetCurrentTaskHandle()获取当前任务的任务句柄
xTaskGetHandle()获取指定任务的任务句柄
xTaskGetIdleTaskHandle()获取空闲任务的任务句柄
uxTaskGetStackHighWaterMark()获取任务的任务栈历史剩余最小值
eTaskGetState()获取任务状态
pcTaskGetName()获取任务名
xTaskGetTickCount()获取系统时钟节拍计数器的值
xTaskGetTickCountFromISR()中断中获取系统使用节拍计数器的值
xTaskGetSchedulerState()获取任务调度器状态
uxTaskGetNumberOfTasks()获取系统中任务的数量
vTaskList()以“表格”形式获取所有任务的信息
vTaskGetRunTimeStats()获取任务的运行时间等信息
vTaskSetApplicationTaskTag()设置任务 Tag
SetThreadLocalStoragePointer()设置任务的独有数据记录数组指针
GetThreadLocalStoragePointer()获取任务的独有数据记录数组指针

任务相关 API 函数详解

函数 uxTaskPriorityGet()

此函数用于获取指定任务的任务优先级,若使用此函数,需在 FreeRTOSConfig.h 文件中设
置配置项 INCLUDE_uxTaskPriorityGet 为 1,此函数的函数原型如下所示:
UBaseType_t uxTaskPriorityGet(const TaskHandle_t xTask);
函数 uxTaskPriorityGet()的形参描述,如下表所示:

形参描述
xTask待获取优先级的任务

函数 uxTaskPriorityGet()的返回值,如下表所示:

返回值描述
整数指定任务的优先级

函数 vTaskPrioritySet()

此函数用于设置指定任务的优先级,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置项 INCLUDE_vTaskPrioritySet 为 1,此函数的函数原型如下所示:
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority);
函数 vTaskPrioritySet()的形参描述,如下表所示:

形参描述
xTask待设置优先级的任务
uxNewPriority任务优先级

函数 vTaskPrioritySet()无返回值

函数 uxTaskGetSystemState()

此函数用于获取所有任务的状态信息,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置项 configUSE_TRACE_FACILITY 为 1,此函数的函数原型如下所示:
UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray, const UBaseType_t uxArraySize, configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime);
函数 uxTaskGetSystemState()的形参描述,如下表所示:

形参描述
pxTaskStstusArray接收信息变量数组的首地址
uxArraySize接收信息变量数组的大小
pilTotalRunTime系统总运行时间

函数 uxTaskGetSystemState()的返回值,如下表所示:

返回值描述
整型获取信息的任务数量

注意:使用该函数会导致调度器长时间处于挂起状态, 因此该函数仅用于调试。

函数 uxTaskGetSystemState()的形参 pxTaskStatusArray 指向变量类型为 TaskStatus_t 的变量的首地址,可以是一个数组,用来存放多个TaskStatus_t类型的变量,函数 uxTaskGetSystemState()使用将任务的状态信息,写入到该数组中,形参 uxArraySize 指示该数组的大小,其中变量类型
TaskStatus_t 的定义如下所示:

typedef struct xTASK_STATUS
{
 TaskHandle_t xHandle; 							/* 任务句柄 */
 const char * pcTaskName; 						/* 任务名 */
 UBaseType_t xTaskNumber; 						/* 任务编号 */
 eTaskState eCurrentState; 						/* 任务状态 */
 UBaseType_t uxCurrentPriority; 				/* 任务优先级 */
 UBaseType_t uxBasePriority; 					/* 任务原始优先级 */
 configRUN_TIME_COUNTER_TYPE ulRunTimeCounter; 	/* 任务被分配的运行时间 */
 StackType_t * pxStackBase; 					/* 任务栈的基地址 */
 configSTACK_DEPTH_TYPE usStackHighWaterMark; 	/* 任务栈历史剩余最小值 */
} TaskStatus_t;

该结构体变量就包含了任务的一些状态信息,获取到的每个任务都有与之对应的TaskStatus_t 结构体来保存该任务的状态信息

函数 vTaskGetInfo()

此函数用于获取指定任务的任务信息,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置项 configUSE_TRACE_FACILITY 为 1,此函数的函数原型如下所示:
void vTaskGetInfo( TaskHandle_t xTask, TaskStatus_t * pxTaskStatus, BaseType_t xGetFreeStackSpace, eTaskState eState);
函数 vTaskGetInfo()的形参描述,如下表所示:

形参描述
xTask指定获取信息的任务
pxTaskStatus接收任务信息的变量
xGetFreeStackSpace任务栈历史剩余最小值
eState任务状态

函数 vTaskGetInfo()无返回值。

注意:使用该函数会导致调度器长时间处于挂起状态, 因此该函数仅用于调试

函数 vTaskGetInfo()的形参 eState 用来表示任务的状态,其变量类型为 eTaskState,变量类型 eTaskState 的定义如下所示:

typedef enum
{
 eRunning = 0, 			/* 运行态 */
 eReady, 				/* 就绪态 */
 eBlocked, 				/* 阻塞态 */
 eSuspended, 			/* 挂起态 */
 eDeleted, 				/* 任务被删除 */
 eInvalid 				/* 非法值 */
} eTaskState;

形参 eState 用于决定形参 pxTaskStatus 结构体中成员变量 eCurrentState(任务状态) 的值,表示任务的状态,如果传入的 eState 为 eInvalid,那么 eCurrentState 为任务当前的状态,否eCurrentState为 eState。

简单来说就是如果传入的eState 是eInvalid(非法值),eCurrentState 不改变
传入的不是eInvalid 的话就更新eCurrentState 的值为eState。

函数 xTaskGetApplicationTaskTag()

此函数用于获取指定任务的 Tag,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置项 configUSE_APPLICATION_TASK_TAG 为 1,此函数的函数原型如下所示:
TaskHookFunction_t xTaskGetApplicationTaskTag(TaskHandle_t xTask);
函数 xTaskGetApplicationTaskTag()的形参描述,如下表所示:

形参描述
xTask待获取 Tag 的任务

函数 xTaskGetApplicationTaskTag()的返回值,如下表所示:

返回值描述
函数指针Tag(标签)

返回与任务关联的“标签”值。标签值的含义和用途 由应用程序编写者定义。RTOS 内核本身通常不会 访问标签值
此功能仅适用于高级用户,一般较少用到

函数 xTaskGetCurrentHandle()

此函数用于获取当前系统正在运行的 任务的任务句柄, 若使用此函数,需 在FreeRTOSConfig.h 文件中设置配置项 INCLUDE_xTaskGetCurrentTaskHandle 为 1,此函数的函数原型如下所示:
TaskHandle_t xTaskGetCurrentTaskHandle(void);
函数 xTaskGetCurrentTaskHandle()无形参
函数 xTaskGetCurrentTaskHandle()的返回值,如下表所示

返回值描述
TaskHandle_t任务句柄

函数 xTaskGetHandle()

此函数用于通过任务名获取任务句柄,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置项 INCLUDE_xTaskGetHandle 为 1,此函数的函数原型如下所示:
TaskHandle_t xTaskGetHandle(const char * pcNameToQuery);
函数 xTaskGetHandle()的形参描述,如下表所示:

形参描述
pcNameToQuery任务名

函数 xTaskGetHandle()的返回值,如下表所示:

返回值描述
TaskHandle_t任务句柄

函数 xTaskGetIdleTaskHandle()

此函数用于获取空闲任务的任务句柄,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置项 INCLUDE_xTaskGetIdleTaskHandle 为 1,此函数的函数原型如下所示:
TaskHandle_t xTaskGetIdleTaskHandle(void);
函数 xTaskGetIdleTaskHandle()无形参。
函数 xTaskGetIdleTaskHandle()的返回值,如下表所示:

返回值描述
TaskHandle_t空闲任务的任务句柄

返回值:与空闲任务关联的任务句柄。RTOS 调度器启动时,自动创建空闲任务

函数 uxTaskGetStackHighWaterMark()

此函数用于获取指定任务的任务栈的历史剩余最小值, 若 使用此函数 ,需在FreeRTOSConfig.h 文件中设置配置项 INCLUDE_uxTaskGetStackHighWaterMark 为 1,此函数的函数原型如下所示:
UBaseType_t uxTaskGetStackHighWaterMark(TaskHandle_t xTask);
函数 uxTaskGetStackHighWaterMark()的形参描述,如下表所示:

形参描述
xTask待获取任务栈历史剩余最小值的任务

函数 uxTaskGetStackHighWaterMark()的返回值,如下表所示:

返回值描述
整数任务栈的历史剩余最小值

随着任务的执行和中断的处理,任务使用的堆栈会增加和缩小。 uxTaskGetStackHighWaterMark() 返回任务开始执行后任务可用的最小剩余堆栈空间量—— 即任务堆栈达到最大(最深)值时未使用的堆栈量。这就是 所谓的堆栈“高水位线

高水位线:它返回的是任务开始执行后,任务可用的最小剩余堆栈空间量。换句话说,这个函数诉你的是:在任务执行过程中,堆栈使用量达到最大(即堆栈“最深”)时,还有多少堆栈空间是未使用的。这个未使用的堆栈空间量,就被称为堆栈的“高水位线”

如果“高水位线”的值很低,说明任务在执行过程中可能使用了大量的堆栈空间,有堆栈溢出的风险。这时,开发者就需要对任务进行优化,比如减少局部变量的使用、避免深度递归调用等。

函数 eTaskGetState()

此函数用于获取指定任务的状态,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置
项 INCLUDE_eTaskGetState 为 1,此函数的函数原型如下所示:
eTaskState eTaskGetState(TaskHandle_t xTask);
函数 eTaskGetState()的形参描述,如下表所示:

形参描述
xTask待获取状态的任务

函数 eTaskGetState()的返回值,如下表所示:

返回值描述
eTaskState任务状态

下表列出了 eTaskGetState()针对 xTask 参数引用的任务可能所处的每种状态返回的值。

状态返回值
准备就绪eReady
运行eRunning(调用任务正在查询自己的优先级)
已阻塞eBlocked
已挂起eSuspended
已删除eDeleted(任务 TCB 正在等待清理)

函数 pcTaskGetName()

此函数用于获取指定任务的任务名,此函数的函数原型如下所示:
char * pcTaskGetName(TaskHandle_t xTaskToQuery);
函数 pcTaskGetName()的形参描述,如下表所示:

形参描述
xTaskToQuery任务句柄

所查询任务的句柄。xTaskToQuery 可以设置为 NULL,以查询调用任务的名称

函数 pcTaskGetName()的返回值,如下表所示:

返回值描述
字符串任务名

指向主题任务名称的指针,它是一个标准的以 NULL 结尾的 C 字符串。

函数 xTaskGetTickCount()

此函数用于获取系统时钟节拍计数器的值,此函数的函数原型如下所示:
volatile TickType_t xTaskGetTickCount(void);
函数 xTaskGetTickCount()无形参

函数 xTaskGetTickCount()的返回值,如下表所示

返回值描述
整型系统时钟节拍计数器的值

注意 返回值自调用 vTaskStartScheduler 以来的滴答数

函数 xTaskGetTickCountFromISR()

此函数用于在中断中获取系统时钟节拍计数器的值,此函数的函数原型如下所示:
volatile TickType_t xTaskGetTickCountFromISR(void);
函数 xTaskGetTickCountFromISR()无形参。
函数 xTaskGetTickCountFromISR()的返回值,如下表所示:

返回值描述
整型系统时钟节拍计数器的值

注意 返回值自调用 vTaskStartScheduler 以来的滴答数

函数 xTaskGetSchedulerState()

此函数用于获取任务调度器的运行状态,INCLUDE_xTaskGetSchedulerState 或configUSE_TIMERS
必须在 FreeRTOSConfig.h 中设置为 1,才可使用此函数。此函数的函数原型如下所示:
BaseType_t xTaskGetSchedulerState(void);
函数 xTaskGetSchedulerState()无形参。
函数 xTaskGetSchedulerState()的返回值,如下表所示:

返回值描述
整型任务调度器的运行状态

以下任一常量(在 task.h 中定义):askSCHEDULER_NOT_STARTED、taskSCHEDULER_RUNNING、taskSCHEDULER_SUSPENDED

函数 uxTaskGetNumberOfTasks()

此函数用于获取系统中任务的数量,此函数的函数原型如下所示:
UBaseType_t uxTaskGetNumberOfTasks(void);
函数 uxTaskGetNumberOfTasks()无形参。
函数 uxTaskGetNumberOfTasks()的返回值,如下表所示

返回值描述
整型任务调度器的运行状态

RTOS 内核当前正在管理的任务数。这包括所有准备就绪、阻塞和 挂起的任务。已删除但尚未被空闲任务释放的任务也将包含 在计数中。

函数 vTaskList()

此函数用于以“表格”的形式获取系统中任务的信息,若使用此函数,需在 FreeRTOSConfig.h文 件 中 同 时 设 置 配 置 项 configUSE_TRACE_FACILITY 和配置项
configUSE_STATS_FORMATTING_FUNCTIONS 为 1,此函数的函数原型如下所示:
void vTaskList(char * pcWriteBuffer);
函数 vTaskList()的形参描述,如下表所示:

形参描述
pcWriteBuffer接收任务信息的缓存指针

函数 vTaskList()无返回值。

注意:此函数在执行期间会禁用中断。它不是作为 一种正常的应用程序运行时的工具,而是作为调试辅助工具。

函数 vTaskList()获取到的任务信息示例,如下图所示:
在这里插入图片描述
在 ASCII 表中,以下字母用于表示任务的状态:

  • ‘B’ - 已阻塞
  • ‘R’ - 准备就绪
  • ‘D’ - 已删除(等待清理)
  • ‘S’ - 已挂起或已阻塞,没有超时

vTaskList() 是一个仅为方便起见而提供的实用程序函数,并不属于内核。

函数 vTaskGetRunTimeStats()

此函数用于获取指定任务的运行时间、运行状态等信息
若使用此函数,需在
FreeRTOSConfig.h 文 件 中 同 时 设 置 配 置 项 configGENERATE_RUN_TIME_STATSconfigUSE_STATS_FORMATTING_FUNCTIONSconfigSUPPORT_DYNAMIC_ALLOCATION必须定义为 1,才可使用此函数。此外,应用程序还必须提供portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()和 portGET_RUN_TIME_COUNTER_VALUE
的定义,分别用于配置外设 定时器/计数器和返回定时器的当前计数值。计数器的频率应该至少是 滴答计数的 10 倍此函数的函数原型如下所示:
void vTaskGetRunTimeStats(char * pcWriteBuffer);
函数 vTaskGetRunTimeState()的形参描述,如下表所示:

形参描述
pcWriteBuffer接收任务运行时间和状态等信息的缓存指针

函数 vTaskGetRunTimeState()无返回值。

vTaskGetRunTimeStats()调用 uxTaskGetSystemState(), 然后将 uxTaskGetSystemState()生成的原始数据转换为 易于阅读的 (ASCII) 表格形式,表格中会显示 每个任务在运行状态下所花费的时间(即每个任务消耗的 CPU 时间量)。数据以 绝对值和百分比值的形式提供。绝对值的分辨率 取决于应用程序提供的运行时间统计时钟的频率

函数 vTaskSetApplicationTaskTag()

此函数用于设置指定任务的 Tag,若使用此函数,需在 FreeRTOSConfig.h 文件中设置配置项 configUSE_APPLICATION_TASK_TAG 为 1,此函数的函数原型如下所示:
void vTaskSetApplicationTaskTag( TaskHandle_t xTask, TaskHookFunction_t pxTagValue);
函数 vTaskSetApplicationTaskTag()的形参描述,如下表所示:

形参描述
xTask待插入 Tag 的任务
pxTagValueTag 指针

任务可以使用 NULL 作为参数值来查询自己的标签值。

函数 vTaskSetApplicationTaskTag()无返回值。

函数 SetThreadLocalStoragePointer()

此函数用于设置指定任务的独有数据数组指针,此函数的函数原型如下所示:
void vTaskSetThreadLocalStoragePointer( TaskHandle_t xTaskToSet, BaseType_t xIndex, void * pvValue)
函数 SetThreadLocalStoragePointer()的形参描述,如下表所示:

形参描述
xTaskToSet待设置的任务
xIndex设置的指针
pvValue

函数 SetThreadLocalStoragePointer()无返回值。

函数 GetThreadLocalStoragePointer()

此函数用于获取指定任务的独有数据数组指针,此函数的函数原型如下所示
void *pvTaskGetThreadLocalStoragePointer( TaskHandle_t xTaskToQuery, BaseType_t xIndex);

函数 GetThreadLocalStoragePointer()的形参描述,如下表所示:

形参描述
xTaskToQuery待获取的任务
xIndex接收的指针

函数 GetThreadLocalStoragePointer()的返回值,如下表所示:

返回值描述
void*指针指向的值

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

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

相关文章

2022-2023全国高校计算机能力挑战赛区域赛python组编程题

mi目录 2022 1. 2. 1. 使用 format() 方法 2. 使用 f-string(Python 3.6 及以上) 2023 1. 2. 3. 4 闽农大宝玲楼 2022 1. 1.某动物研究员给动物园的动物们定了一个园区幸福值,其中园区幸福值的计算为一个园区内“所有动物的活动时…

在Element Ui中支持从系统粘贴版中获取图片和PDF,Docx,Doc,PPT等文档

在上一篇中,我们单纯的实现了Ctrl V实现从粘贴版中获取图片信息,但是点击上传的时候会有个bug,就是点击文件上传的时候,会出现一个bug,这篇,我们将在上一篇的基础上进行完善,并支持从粘贴版中获…

【Android学习】2024最新版Android Studio安装与配置

准备工作 Windows系统的要求 一、下载 Android Studio官网:https://developer.android.google.cn/studio?hlen 今天是2024年9月27日,Android Studio已经更新到了Koala版本 直接下载 二、安装 笔者当前环境变量中配置的JDK版本为1.8 双击.exe文件运行…

如何解决JAVA程序通过obloader并发导数导致系统夯住的问题 | OceanBase 运维实践

案例背景 某保险机构客户的数据中台,自系统上线后不久,会定期的用 obload 工具从上游业务系统导入数据至OceanBase数据库。但,不久便遇到了应用服务器的 Memory 与 CPU 资源占用持续攀升,最终导致系统夯住而不可用的异常。 memo…

2分钟在阿里云ECS控制台部署个人应用(图文示例)

作为一名程序员,我有大量的个人代码和应用托管在Github/Gitee这些代码仓库。当我想要部署这些代码到我的阿里云ECS服务器时,往往会很麻烦,主要问题有这些: 需要手动安装和配置git,过程非常繁琐。每次都需要登录到机器…

Oracle XE命令行创建数据库的一波三折(已解决)

这是一个目录 前言创建预备创建一、创建配置文件指定控制文件路径二、使用命令行创建数据库三、初始化数据库四、创建服务五、配置监听 Oracle XE尾声 前言 这篇文章是我在误装了oracle xe(精简版数据库)后有感而写,对于xe的具体区别将在文末…

第四十一章 Vue之初识VueX

目录 一、引言 1.1. vuex的概念 1.2. vuex使用场景 1.3. 优势 二、创建演示项目 2.1. 构建项目步骤 2.2. 项目最终生成结构 2.3. 创建项目文件 2.3.1. App.vue 2.3.2. Son1.vue 2.3.3. Son2.vue 三、创建一个空仓库 3.1. 安装vuex 3.2. 新建仓库 3.3. 挂载仓库…

机器学习-35-提取时间序列信号的特征

文章目录 1 特征提取方法1.1 特征提取过程1.2 两类特征提取方法2 基于数据驱动的方法2.1 领域特定特征提取2.2 基于频率的特征提取2.2.1 模拟信号2.2.2 傅里叶变换2.2.3 抽取最大幅值对应特征2.2.4 抽取峰值幅值对应特征2.3 基于统计的特征提取2.4 基于时间的特征提取3 参考附录…

My_SQL day3

知识点:约束 1.dafault 默认约束 2.not null 非空约束 3.unique key 唯一约束 4.primary key 主键约束 5.anto_increment 自增长约束 6.foreign key 外键约束 知识点:表关系 1.一对一 2.一对多 3.多对多 知识点:约束 1.default 默认约束 …

caozha-CEPCS(新冠肺炎疫情防控系统)

caozha-CEPCS,是一个基于PHP开发的新冠肺炎疫情防控系统,CEPCS(全称:COVID-19 Epidemic Prevention and Control System),可以应用于单位、企业、学校、工业园区、村落等等。小小系统,希望能为大…

深度学习推荐系统的工程实现

参考自《深度学习推荐系统》——王喆,用于学习和记录。 介绍 之前章节主要从理论和算法层面介绍了推荐系统的关键思想。但算法和模型终究只是“好酒”,还需要用合适的“容器”盛载才能呈现出最好的味道,这里的“容器”指的就是实现推荐系统…

2024 年(第 7 届)“泰迪杯”数据分析技能赛B 题 特殊医学用途配方食品数据分析 完整代码 结果 可视化分享

一、背景特殊医学用途配方食品简称特医食品,是指为满足进食受限、消化吸收障碍、代谢素乱或者特定疾病状态人群对营养素或者膳食的特殊需要,专门加工配置而成的配方食品,包括0月龄至12月龄的特殊医学用途婴儿配方食品和适用于1岁以上的特殊医…

Ubuntu 的 ROS 2 操作系统安装与测试

引言 机器人操作系统(ROS, Robot Operating System)是一种广泛应用于机器人开发的开源框架,提供了丰富的库和工具,支持开发者快速构建、控制机器人并实现智能功能。 当前,ROS 2 的最新长期支持版本为 Humble Hawksbil…

SQL面试题——奔驰SQL面试题 车辆在不同驾驶模式下的时间

SQL面试题——奔驰SQL面试题 我们的表大致如下 CREATE TABLE signal_log( vin STRING COMMENTvehicle frame id, signal_name STRING COMMENTfunction name, signal_value STRING COMMENT signal value , ts BIGINT COMMENTevent timestamp, dt STRING COMMENTformat yyyy-mm…

pytest执行用例时从conftest.py抛出ModuleNotFoundError:No module named ‘XXX‘异常的解决办法

网上各种各样的:1、关于_pycache_影响conftest的;2、目录路径的;3、配置环境的; 4、发现自己是powershell后,设置环境: $env:environment"local" 仍然报错的:5、最后发现是自己的 …

JAVA:探索 EasyExcel 的技术指南

1、简述 在 Java 开发中,Excel 文件的读写操作是一项常见的需求。阿里巴巴开源的 EasyExcel 提供了一种高效、简洁的解决方案,特别是在处理大规模数据时表现尤为突出。本文将详细介绍 EasyExcel 的优缺点、应用场景,并通过实例展示其基本用法…

Python自动化小技巧24——实现自动化输出模板表格报告

背景 很多人拿到数据excel文件,然后要写报告,做表格,要各种计算,各种排序,分组聚合,数据透视,然后合并单元格,添加边框,加粗,添加显示规则,添加数…

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)

目录 一、前言 二、栈是排列方式 三、栈的单词 四、程序中的栈 五、栈的方法 1.声明并初始化栈 2.往栈里放东西(学名:入栈) 3.从栈往外拿东西 (学名:出栈) 4.清空栈 5.遍历 Stack 6.获取Stack的长…

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址:utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…

PostgreSQL中如果有Left Join的时候索引怎么加

在PostgreSQL中,当你的查询包含多个LEFT JOIN和WHERE条件时,合理地添加索引可以显著提高查询性能。以下是一些具体的优化步骤和建议: 1. 分析查询 使用 EXPLAIN ANALYZE 命令分析你的查询,了解查询的执行计划,识别出连…