当前位置: 首页 > article >正文

【日志队列】log日志实时写入队列,流式输出

有一个这样的任务:在网页上流式输出执行一个函数在终端产生的日志,但是目前只有终端日志,可以通过 自定义 loguru 的 Sink 将日志消息定向到线程安全的队列中,主线程从队列中实时获取日志。

import threading
import queue
from loguru import logger
import asyncio
import sys# 创建线程安全的队列用于存储日志
log_queue = queue.Queue()# 自定义 Sink 将日志写入队列
def log_sink(message):"""将 loguru 日志消息推送到队列"""log_queue.put(message)# 配置 loguru(保留终端输出,同时添加队列 Sink)
logger.remove()  # 移除默认配置(可选)
logger.add(log_sink, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}")
logger.add(sys.stderr, format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}")  # 保留终端输出# 异步任务函数
async def main(prompt):logger.info("任务启动,参数: {}", prompt)await asyncio.sleep(2)logger.success("任务完成")# 线程包装器
def run_async_task(message):loop = asyncio.new_event_loop()asyncio.set_event_loop(loop)loop.run_until_complete(main(message))loop.close()# 启动异步线程
prompt = {"message": "测试日志捕获"}
task_thread = threading.Thread(target=run_async_task,args=(prompt["message"],)
)
task_thread.start()# 主线程实时捕获日志
try:while task_thread.is_alive() or not log_queue.empty():try:log_record = log_queue.get(timeout=0.1)print(f"[捕获的日志] {log_record}")  # 这里可以替换为写入文件或其他处理except queue.Empty:pass
finally:task_thread.join()

相关文章:

【日志队列】log日志实时写入队列,流式输出

有一个这样的任务:在网页上流式输出执行一个函数在终端产生的日志,但是目前只有终端日志,可以通过 自定义 loguru 的 Sink 将日志消息定向到线程安全的队列中,主线程从队列中实时获取日志。 import threading import queue from …...

注意力机制,层归一化,RBA。KAN-ODE,小波KAN

目录 attention is all you need 翻译 多头注意力 8.6 Multi-head Self Attention 模型 模型架构 encoder安定 decode 注意力机制 位置编码 自注意力机制的优势 实验结果 结论 代码 Transformer 架构 代码实现思路 总结 编码器、解码器和位置编码的摆放顺序&…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-3-从ES 7.x到8.x的平滑迁移策略

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-版本升级指南 3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南1. 升级必要性分析1.1 版本特性对比1.2 兼容性评估矩阵 2. 预升级准备清单2.1 环境检查表2.2 数据备份策略 3. 分阶段…...

go回调函数的使用

在Go语言中,回调函数可以有参数,也可以没有参数。它们的定义和使用方式略有不同,但本质上都是将函数作为参数传递给另一个函数,并在适当的时候调用它。以下是带参数和不带参数的回调函数的示例和说明。 1. 不带参数的回调函数 不…...

电脑内存不足怎么办?

常规解决方法盘点 关闭后台程序:按下【Ctrl Shift Esc】组合键打开任务管理器,在 “进程” 选项卡里,把当前不用的程序统统 “结束任务” ,像那些自动更新的软件、常驻后台的播放器,关了能释放不少内存。比如音乐软…...

如何上传文件到github

如何上传文件到github **方法 1:使用 Git 命令行(推荐)****步骤 1:初始化 Git 仓库(如果还没有)****步骤 2:添加远程仓库****步骤 3:添加整个文件夹并提交****步骤 4:推送…...

【RISCV LAB】0x01-安装实验仿真辅助工具

安装实验辅助工具 实验环境搭建安装 Verilator编译依赖下载源码编译安装测试安装 安装 RISC-V 交叉编译工具链编译依赖下载源码编译安装编译并安装添加环境变量并测试 安装 GTKWave其他模拟器推荐RARSemulsiV FAQ 实验环境搭建 Verilator 是一款开源的支持 Verilog 和 SystemV…...

Trae插件革命:用VSPlugin Helper实现VSCode市场插件全自动安装

之前有读者留言说trae都没有c的插件用,确实是这样,trae的插件源用的是open vsx,而c/c插件是vscode官方插件市场的,如果想直接在trae中安装c/c插件是不行的,只能先从vscode官方插件市场把vsix后缀文件先下载下来&#x…...

使用PHP进行自动化测试:工具与策略的全面分析

使用PHP进行自动化测试:工具与策略的全面分析 引言 随着软件开发的复杂性不断增加,自动化测试已成为确保软件质量的关键环节。PHP作为一种广泛使用的服务器端脚本语言,拥有丰富的生态系统和工具支持,使其成为自动化测试的理想选…...

Docker相关面试题

阅读前可以给我关注➕一下嘛 以下是150道Docker相关面试题: Docker基础概念 1.什么是Docker? Docker是一个开源的应用容器引擎,基于Go语言开发,遵循Apache2.0协议。它可以让开发者将应用及其依赖包打包成一个可移植的容器&#x…...

【量化策略】动量突破策略

【量化策略】动量突破策略 🚀量化软件开通 🚀量化实战教程 技术背景与应用场景 动量突破策略是一种基于市场趋势的量化交易策略,它通过识别和利用资产价格的持续上升或下降趋势来获取利润。这种策略特别适用于那些价格波动较大、趋势明显…...

RK3588 openssl-3.4.1 编译安装

安装依赖 sudo apt update && sudo apt install build-essential perl libtext-template-perl -y 下载并解压源码 wget https://www.openssl.org/source/openssl-3.4.1.tar.gz tar -xzf openssl-3.4.1.tar.gz && cd openssl-3.4.1 配置编译选项 ./config --…...

EB-Cable许可管理在云计算环境中的应用

随着云计算技术的飞速发展,越来越多的企业选择将业务迁移到云端,以享受其灵活性、可扩展性和成本效益。然而,在云计算环境中管理软件许可成为了一个新的挑战。幸运的是,EB-Cable许可管理以其卓越的功能和适应性,为企业…...

字符串函数和结构题内存对齐

图下为函数使用&#xff1a; #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }...

5.编译链接和宏**

1. 宏&#xff08;考察很多&#xff09;-要求轻松实现宏&#xff0c;很容易出错 #define 机制包括了一个规定&#xff0c;允许把参数替换到文本中&#xff0c;这种实现通常称为宏或定义宏。 下面是宏的声明方式&#xff1a; #define name(参数列表) 内容 参数列表的左括号必…...

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(43)阴阳镜照连通 - 岛屿数量(DFS、BFS)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三天劫试炼(43)阴阳镜照连通 - 岛屿数量(DFS、BFS) 哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的阴阳镜湖,湖面上倒映着一片由二维网格构成的岛屿世界。湖边有一块巨大的石碑,上面刻着一行文字:“欲破此湖…...

Odoo18 Http鉴权+调用后端接口

最近在调研Odoo18&#xff0c;包括它的前后端原理、源码等。发现官方的开发文档并不十分实用&#xff0c;比如标题这种简单的实用需求&#xff0c;竟然浪费了一点时间&#xff0c;特此记录。 官方文档&#xff1a;External API — Odoo 18.0 documentation 前提&#xff1a;首…...

TSN CB:恢复算法与潜在错误检测

1.概述 基础恢复功能位于排序功能中。它评估从较低层向上传递的一个或多个成员流的数据包的sequence_number子参数&#xff0c;以丢弃重复的数据包。基本恢复功能的给定实例化可以作为序列恢复功能或单个恢复功能。 序列恢复功能有两种序列恢复算法&#xff0c;因此它既可用于间…...

【sql靶场】第11、12关-post提交注入

目录 【sql靶场】第11、12关-post提交注入 POST 一、URL 二、核心组成部分 三、数据编码规范 四、应用场景与请求方法 第十一关 方法一 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 方法二 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 第…...

框架、云原生、微服务的基本概念

架构 互联网应用的架构设计随着业务需求的增长和技术的发展经历了从单一架构到垂直架构&#xff0c;再到分布式架构的演变。以下是这三种架构的定义、特点以及具体的例子&#xff1a; 1. 单一架构&#xff08;Monolithic Architecture&#xff09; 定义 单一架构是一种将所有…...

Discuz建站教程之论坛头部logo跳转链接怎么修改?

在修改头部logo跳转链接前&#xff0c;我们需要知道对应代码在哪个文件目录&#xff0c;进入宝塔或是服务器&#xff0c;找到文件&#xff1a;\template\default\common\header.htm&#xff0c;编辑器打开&#xff0c;搜索以下代码&#xff0c;大概在135行 <a href"{i…...

AI重构SEO关键词布局

内容概要 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型&#xff0c;智能系统能够实时解析海量搜索数据&#xff0c;构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…...

贪心算法简介(greed)

前言&#xff1a; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在每个决策阶段都选择当前最优解的算法策略&#xff0c;通过局部最优的累积来寻求全局最优解。其本质是"短视"策略&#xff0c;不回溯已做选择。 什么是贪心、如何来理解贪心(个人对贪心的…...

OpnenHarmony 开源鸿蒙北向开发——1.开发环境搭建(DevEco Studio 5.03)

我这边是基于window下对OpenHarmony开源鸿蒙进行北向开发。 一、安装DevEco Studio 1、下载 下载中心 | 华为开发者联盟-HarmonyOS开发者官网&#xff0c;共建鸿蒙生态 2、安装 下载完成之后进行解压 双击进行安装 按照我的步骤进行 选择安装目录&#xff0c;全部配置完成后…...

钉钉(excel)能让表格中不是‘北京’的字符串自动加亮显示(方便查看)以及隔行填充严颜色是斑马色(方便查看)嘛

在钉钉在线表格中&#xff0c;虽然功能相对Excel有所简化&#xff0c;但仍然可以通过条件格式实现对特定内容的高亮显示。以下是具体步骤&#xff1a; 一、在钉钉在线表格中设置条件格式 1. 打开钉钉在线表格 登录钉钉&#xff0c;进入“钉钉在线表格”应用。 打开你需要操作…...

【工具】ReConPlot一个可视化和解释基因组重排的R包

文章目录 介绍代码案例加载R包导入数据 参考 介绍 人类肿瘤的全基因组测序研究表明&#xff0c;复杂形式的结构变异&#xff0c;统称为复杂基因组重排&#xff08;cgr&#xff09;&#xff0c;在不同类型的癌症中普遍存在。cgr的检测、分类和机制解释需要对体细胞拷贝数畸变&a…...

OSPF-2 邻接建立关系

上一期我们说了OSPF的邻居建立关系以及OSPF邻居关系建立中建立失败的因素以及相关实验案例 这一期我们来说说OSPF的邻接关系建立时需要交互哪些报文以及失败因素及原因和相关实验案例 一、概述 在运行了OSPF的网络当中为了交互链路状态信息和路由信息,互相之间需要建立邻接关…...

最完美的WPF无边框设计!

常规的无边框方法设计 常规的WPF无边框设计方法都是通过AllowsTransparency="True"和WindowStyle=“None”,并且使用WindowChrome样式来实现,但是这样会有问题就是,窗体最大化的时候将底部任务栏给挡住了,另外最大化的时候不能拖动窗体。参考这个大佬的设计@ 若…...

无限使用Typora

下载 Typora https://www.typora.net/#home 安装 找到 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist/static/js/LicenseIndex.180dd4c7.5b0f7af9.chunk.js 文件 打开文件 搜索 e.hasActivated"true"e.hasActivated,修改成 e.hasActivated&…...

工作记录 2017-01-12

序号 工作 相关人员 1 协助BPO进行Billing的工作。 处理Amazing Charts的数据查询。 修改BillingJobPoster&#xff0c;处理CCDA 的自动导入&#xff0c;预计还需一天才能完成。 修改录入Code的界面&#xff08;code 移动到指定位置&#xff09;&#xff0c;预计明天更新。…...