ADK 第四篇 Runner 执行器
智能体执行器 Runner,负责完成一次用户需求的响应,是ADK中真正让Agent运行起来的引擎,其核心功能和Agents SDK中的Runner类似,具体作用如下:
-
会话管理:自动读取/写入 SessionService,维护历史信息。
-
Agent调用:调用指定的Agent完成推理和工具调用
-
输入输出流转:把用户输入交给Agent,把Agent输出返回。
-
流程控制:支持多轮对话、子Agent委托、工具调用等。
-
生命周期管理:处理每次对话流程的完整生命周期
Runner 是Agent的管理者,负责组织每次对话交互的完整生命周期。
Runner 类(Class)
class Runner:"""Runner 类用于运行智能体。Runner 类用于在会话中管理智能体的执行,负责处理消息、生成事件,并与各类服务进行交互。"""app_name: str"""The app name of the runner."""agent: BaseAgent"""The root agent to run."""artifact_service: Optional[BaseArtifactService] = None"""The artifact service for the runner."""session_service: BaseSessionService"""The session service for the runner."""memory_service: Optional[BaseMemoryService] = None"""The memory service for the runner."""def __init__(self,*,app_name: str,agent: BaseAgent,artifact_service: Optional[BaseArtifactService] = None,session_service: BaseSessionService,memory_service: Optional[BaseMemoryService] = None,):"""Initializes the Runner.Args:app_name: The application name of the runner.agent: The root agent to run.artifact_service: The artifact service for the runner.session_service: The session service for the runner.memory_service: The memory service for the runner."""self.app_name = app_nameself.agent = agentself.artifact_service = artifact_serviceself.session_service = session_serviceself.memory_service = memory_service
参数解析如下:
参数名 | 参数类型 | 含义 | 说明 |
---|---|---|---|
app_name | str | 应用名称 | 应用的名称,用于标识不同的应用实例。 |
agent | BaseAgent | 要运行的主Agent | 负责执行实际的任务和推理 |
artifact_service | Optional[BaseArtifactService] | 文件存储服务(可选) | 可选的文件存储服务,用于处理生成的工件(如:文件) |
session_service | BaseSessionService | 会话服务 | 用于管理和维护对话历史。 |
memory_service | Optional[BaseMemoryService] | 内存服务(可选) | 用于长期和短期记忆管理 |
创建Runner
# 创建智能体执行器
runner = Runner(agent=agent,app_name="app01",session_service=session_service
)
run_async(...)方法
async def run_async(self,*,user_id: str,session_id: str,new_message: types.Content,run_config: RunConfig = RunConfig(),) -> AsyncGenerator[Event, None]:# ...
runner.run_async(...)方法是Runner类的核心方法之一,用于以异步的方式执行Agent的任务。这个方法接收用户输入的消息,并将其添加到会话中,然后启动Agent来处理该消息,并生成一系列的事件(Event).
具体参数解析如下:
1、user_id (str)
-
该参数表示用户的唯一标识,用于标记当前会话是属于哪个用户的,每个用户可以有多个会话实例。
2、session_id (str)
-
该参数表示会话的唯一标识,用于区分不同用户或同一个用户的不同的会话,每次创建会话时都会为其分配一个唯一的session_id
3、new_message (types.Content)
-
这是ADK中的一个核心对象,表示传递给Agent的新消息。types.Content 是一个包含具体消息内容的对象,通常它包含 role(角色)、text(消息文本) 等字段。
-
例如:content: parts=[Part(video_metadata=None, thought=None, code_execution_result=None, executable_code=None, file_data=None, function_call=None, function_response=None, inline_data=None, text='写一句心灵鸡汤')] role='user'
4、run_config (RunConfig) 可选
-
这是一个配置对象,用于定制执行时的参数设置,可以根据需求设置一些如语音配置、响应方式、模型最大调用次数等参数。其默认值为 RunConfig(),这是一个内置的默认配置类。
RunConfig 核心字段解析:
-
speech_config: 用于配置语音识别和语音输出的相关设置(例如:语音转文本、语音输出等),通常与语音助手相关。
-
response_modalities:配置响应的方式,例如返回文本、语音等。
-
save_input_blobs_as_artifacts: 是否将输入的文件保存为工件(例如:将用户上传的图片保存为文件以供后续处理),默认值为false
-
support_cfc: 是否支持CFC(Custom Function Calling),即是否允许Agent调用自定义函数。
-
streaming_mode:设置流模型(例如:是否开启流式输出),用于处理生成时响应时间较长的情况。
-
output_audio_transcription: 配置输出的音频转录设置(比如:支持语音输出)。
-
max_llm_calls: 配置在一次会话中最大可以调用LLM次数的上限。默认值: 500
运行Agent
# 执行对话
async def call_agent_async(query: str, runner, user_id, session_id):"""向agent发送查询并打印最终响应"""print(f"\n>>> 用户: {query} \n")# 将用户消息转换为ADK格式content = types.Content(role='user', parts=[types.Part(text=query)])print("content:", content)final_response_text = "未生成最终响应。" # Default# Key Concept: run_async 会执行Agent逻辑并持续生成事件流(Events)。# 我们通过遍历事件流来获取最终答案。async for event in runner.run_async(user_id=user_id, session_id=session_id, new_message=content):# 您可以取消下面这行的注释,以查看执行过程中的所有事件print(f" [Event] Author: {event.author}, Type: {type(event).__name__}, Final: {event.is_final_response()}, Content: {event.content}")# Key Concept: is_final_response() 用于标记当前对话轮次(turn)的终结消息if event.is_final_response():if event.content and event.content.parts:# 假设响应文本位于首部分final_response_text = event.content.parts[0].textelif event.actions and event.actions.escalate: # Handle potential errors/escalationsfinal_response_text = f"Agent escalated: {event.error_message or 'No specific message.'}"# Add more checks here if needed (e.g., specific error codes)break # 找到最终响应后停止处理事件print(f"<<< Agent Response: {final_response_text}")if __name__ == '__main__':query = "写一句心灵鸡汤"asyncio.run(call_agent_async(query=query,runner=runner,user_id=USER_ID,session_id=SESSION_ID))
call_agent_async(...) 函数解析
🍂Part 1 导入依赖的模块
from google.genai import types
这个types模块是用于在ADK中创建消息内容的,它允许你定义消息的"角色"(例如:user 或 assistant),以及消息的内容部分。
🍂Part 2 定义 call_agent_async 函数
async def call_agent_async(query: str, runner, user_id, session_id):
-
query: 用户输入的查询问题。
-
runner: 创建的Runner对象,负责启动Agent并管理会话。
-
user_id 和 session_id: 用于标记特定用户的会话,确保模型能够维持会话上下文。
🍂Part 3 将用户消息转换为ADK格式
content = types.Content(role='user', parts=[types.Part(text=query)])
content中内容:
这里将用户的查询(query) 格式化为ADK的消息格式,并通过 types.Content 和 types.Part 封装成可以传递给Agent的内容。 role="user" 表明消息是由用户发送的。
🍂Part 4 准备获取Agent最终回复
final_response_text = "未生成最终响应。" # Default
默认情况下 final_response_text 被初始化为一个错误信息字符串,表明Agent没有最终响应,后续会被更新为最终真正的回答.
🍂Part 5 调用Agent并监听事件
async for event in runner.run_async(user_id=user_id, session_id=session_id, new_message=content):# 您可以取消下面这行的注释,以查看执行过程中的所有事件print(f" [Event] Author: {event.author}, Type: {type(event).__name__}, Final: {event.is_final_response()}, Content: {event.content}")
runner.run_async(...) 是一个异步生成器,负责执行Agent推理并生成一系列事件 (Events),每个事件代表了交互中的一步操作(如用户消息、模型回复、工具调用等)
你可以通过 async for...循环迭代所有的事件,并逐一检查它们的内容。
Event 事件中的内容:
🍂Part 6 检查是否是最终响应
if event.is_final_response():
event.is_final_response() 用来判断当前事件是否是最终响应,这个判断标志着Agent已经完成了对用户问题的处理,可以停止进一步处理。
if event.content and event.content.parts:final_response_text = event.content.parts[0].text
如果事件 content 存在,并且包含了 parts(模型回复的文本内容) ,就将 最终回复 保存到 final_response_text 变量中。
elif event.actions and event.actions.escalate: # Handle potential errors/escalationsfinal_response_text = f"Agent escalated: {event.error_message or 'No specific message.'}"
如果 event.actions.escalate为True , 表示有错误发生或需要升级,比如模型无法处理问题,或者需要人工干预,这时,会将相应的错误信息记录在 final_response_text
相关文章:
ADK 第四篇 Runner 执行器
智能体执行器 Runner,负责完成一次用户需求的响应,是ADK中真正让Agent运行起来的引擎,其核心功能和Agents SDK中的Runner类似,具体作用如下: 会话管理:自动读取/写入 SessionService,维护历史信…...
yolo 用roboflow标注的数据集本地训练 kaggle训练 comet使用 训练笔记5
本地训练 8gb内存,机械硬盘用了4分钟训练完了 ........... model torch.hub.load(path/to/yolov5, custom, path./runs/train/exp10/weights/best.pt, sourcelocal) 连不上github kaggel训练 传kaggle了 # Train YOLOv5s on COCO128 for 3 epochs !python train…...
chili3d笔记11 连接yolo python http.server 跨域请求 flask
from ultralytics import YOLO from flask import Flask, request, jsonify from flask_cors import CORS import base64 from io import BytesIO from PIL import Image import json# 加载模型 model YOLO(./yolo_detect/best.pt)app Flask(__name__) CORS(app) # 启用跨域…...
安全为上,在系统威胁建模中使用量化分析
*注:Open FAIR™ 知识体系是一种开放和独立的信息风险分析方法。它为理解、分析和度量信息风险提供了分类和方法。Open FAIR作为领先的风险分析方法论,已得到越来越多的大型组织认可。 在数字化风险与日俱增的今天,企业安全决策正面临双重挑战…...
STA中的multi_cycle 和false_path详细讨论
特殊路径:跨时钟域下的exception_path:分为多种情况优先 1、不同clk_domain ,但频率相同 create_clock -name CLKM -period 10 -waveform {0 5} [get_ports CLKM] create_clock -name CLKP -period 10 -waveform {0 5} [get_ports CLKP] set_multicycl…...
Vite 的工作流程
Vite 的工作流程基于其创新的 “预构建 按需加载” 机制,通过利用现代浏览器对原生 ES 模块的支持,显著提升了开发效率和构建速度。以下是其核心工作流程的详细分析: 一、开发环境工作流程 1. 启动开发服务器 冷启动:通过 npm …...
NGINX 的 ngx_http_auth_jwt_module模块
一、模块概述 ngx_http_auth_jwt_module 模块用于通过验证请求中提供的 JWT 来进行客户端授权。此模块支持 JSON Web 签名(JWS)、JSON Web 加密(JWE)以及嵌套 JWT(Nested JWT),使其成为一种灵活…...
【Game】Powerful——Transformation Card(10)
文章目录 1 级卡片2 级卡片3 级卡片4 级卡片5 级卡片6 级卡片7 级卡片8 级卡片8.1、神兽8.2、珍兽 9、其他9.1、5 级变身卡9.2、8 级变身卡 10、PK 汇总物理 11、卡片合成 1 级卡片 千变万化等级要求:1 级 金钱龟,防御30⬆ 大耳兔,速度15⬆…...
【算法学习】递归、搜索与回溯算法(一)
算法学习: https://blog.csdn.net/2301_80220607/category_12922080.html?spm1001.2014.3001.5482 前言: 这个专题与前面的相比是比较有难度的,但是在平时刷题时出现的概率还是非常高的,下面还是按照之前的逻辑来理清一下这几道…...
发行基础:上传版本注意事项
1、steam的规则是上传,提审,随时可更新。 2、基本流程:根据app id以及depot id,上传本地游戏文件到服务器,把分支版本设置为默认,发布。 试玩版与正式版的app id与depot id是相互独立的。 3、理论上开发者…...
智算中心建设方案和前景分析
智算中心建设方案和前景分析 一、智算中心的概念与重要性 1.1 定义与内涵 智算中心,即智能计算中心,是基于最新人工智能理论,采用领先的人工智能计算架构,专门为人工智能应用提供所需的算力服务、数据服务和算法服务的新型基础…...
亚马逊卖家复刻案例:用社群分层策略实现海外用户月均消费3.2次
近年来,随着跨境电商市场的快速发展,全球消费模式经历深刻变革。尤其是在美国、欧洲等成熟市场,中小卖家面对高度市场集中和运营成本上升的双重压力,纷纷寻求以更精细化的用户运营来提高客户复购率,增加单用户价值。20…...
小刚说C语言刷题—1038编程求解数学中的分段函数
1.题目描述 编程求解数学中的分段函数。 …………x1 (当 x>0 )。 yf(x)…0 (当 x0 )。 ………x−1 (当 x<0 )。 上面描述的意思是: 当x>0 时 yx1 ; 当 x0 时 y0 ; 当 x<0 时 yx−1 。 输入 输入一行,只有一个整数x(−30000≤x≤30…...
kotlin 03flow-stateFlow和sharedFlow企业中使用
一 stateFlow和sharedFlow企业中使用 在企业级 Kotlin 项目中,StateFlow 和 SharedFlow 是 状态管理 与 事件分发 的核心工具,尤其在 MVVM 架构中扮演着极为关键的角色。 ✅ 企业中如何使用 StateFlow 和 SharedFlow 场景工具示例UI 状态同步ÿ…...
【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码)
【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码) 【机器学习|学习笔记】决策树Decision Tree(DT)的起源、原理、发展、改进和应用(附代码) 文…...
Kotlin-空值和空类型
变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象 在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题 Kotlin中所有的类型默认都是…...
Java 企业级开发设计模式全解析
Java 企业级开发设计模式全解析 在 Java 企业级开发的复杂领域中,设计模式如同精湛的工匠工具,能够帮助开发者构建高效、可维护、灵活且健壮的软件系统。它们是无数开发者在长期实践中总结出的解决常见问题的最佳方案,掌握这些模式对于提升开…...
高并发内存池
文章目录 前言一、项目介绍二、内存池介绍1.池化技术2.内存池3.malloc视角下内存的管理 三、定长内存池3.1 设计思路3.2 数据结构 四、高并发内存池整体框架设计4.1 thread cachethreadcache哈希桶映射对齐规则threadcache TLS无锁访问 4.2 central cachecentral cache结构设计…...
常用对称加密算法的Python实现及详解
文章目录 **常用对称加密算法的Python实现及详解****1. 对称加密概述****1.1 对称加密的基本原理****1.2 对称加密的分类****1.3 对称加密的应用** **2. DES(Data Encryption Standard)****2.1 算法原理****2.2 Python实现****2.3 安全性分析** **3. 3DE…...
ByteArrayInputStream 类详解
ByteArrayInputStream 类详解 ByteArrayInputStream 是 Java 中用于从字节数组读取数据的输入流,位于 java.io 包。它允许将内存中的字节数组当作输入流来读取,是处理内存数据的常用工具。 1. 核心特性 内存数据源:从字节数组(b…...
MySQL C API高效编程:C语言实现数据库操作的深入解析
知识点【MySQL C API】 1、头文件及MYSQL * 句柄 //头文件 #include <mysql/mysql.h>1、MYSQL MYSQL是一个结构体,封装了与数据库连接相关的所有状态,配置和数据。 2、MYSQL *的本质 类似于 FILE*,代表一个与数据库连接的通道&…...
字符串,数组,指针之间的关系
在C语言中,字符串、指针和数组之间有着紧密且复杂的关系,它们在内存存储、操作方式等方面相互关联,以下为你详细介绍: 字符串 定义:字符串是由字符组成的序列,以空字符(\0)作为结束…...
2025流感疫苗指南+卫健委诊疗方案|高危人群防护+并发症处理 慢性肾脏病饮食指南2025卫健委版|低盐低磷食谱+中医调理+PDF 网盘下载 pdf下载
2025 年卫健委发布的《成人肥胖食养指南(2024 年版)》为减肥提供了科学的饮食指导。 📢提示:文章排版原因,资源链接地址放在文章结尾👇👇,往下翻就行 📢提示࿱…...
学习路线(机器人软件架构)
机器人软件系统架构从入门到专家学习路线 一、基础阶段(6-12个月)基础知识储备机器人基础概念:编程技能必备语言:工具链: 入门框架推荐资源: 中级阶段(1-2年)系统架构基础ROS进阶架构…...
Stellaris 群星 [DLC 解锁] CT 表 [Steam] [Windows SteamOS macOS]
Stellaris 群星 [DLC 解锁] & CT 表 [Steam] [Windows & SteamOS & macOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明; DLC 解锁列表(仅供参考) 《群星》 - Symbols of Domina…...
题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置
题目 3321: 蓝桥杯2025年第十六届省赛真题-画展布置 时间限制: 2s 内存限制: 192MB 提交: 673 解决: 130 题目描述 画展策展人小蓝和助理小桥为即将举办的画展准备了 N 幅画作,其艺术价 值分别为 A1, A2, . . . , AN。他们需要从这 N 幅画中挑选 M 幅,并…...
Excel 查询之 iNDEX与MATCH组合
在Excel日常工作中,数据查询是最常见的操作之一。虽然VLOOKUP函数广为人知,但它有一个明显的局限性——要求查询值必须位于返回值的左侧。今天我要介绍一个更灵活、更强大的组合:INDEX和MATCH函数。 为什么选择INDEXMATCH? VLOO…...
【Leetcode 每日一题 - 补卡】1128. 等价多米诺骨牌对的数量
问题背景 给你一组多米诺骨牌 d o m i n o e s dominoes dominoes。 形式上, d o m i n o e s [ i ] [ a , b ] dominoes[i] [a, b] dominoes[i][a,b] 与 d o m i n o e s [ j ] [ c , d ] dominoes[j] [c, d] dominoes[j][c,d] 等价 当且仅当 ( a c a c …...
【Elasticsearch入门到落地】12、索引库删除判断以及文档增删改查
接上篇《11、RestClient初始化索引库》 上一篇我们完成了使用RestHighLevelClient创建索引库的代码实现,本篇将讲解如何判断索引库是否存在并删除它,以及如何对索引库中的文档进行增删改查操作。 一、索引库判断与删除 在操作索引库时,有时…...
36、C#中的⽅法声明参数关键字params,ref,out的意义及⽤法
在C#中,params、ref 和 out 是方法声明中用于修饰参数的关键字,它们各自有不同的用途和语义。以下是它们的详细说明和用法: 1、 params 关键字 意义 params 允许方法接受可变数量的参数,这些参数会被编译为一个数组。适用于参数…...
DEX平台引领风尚 XBIT让数字资产回归简单与透明
近日,全球加密货币市场持续升温,Dex 交易平台成为众多投资者关注焦点,其中XBIT去中心化交易所平台凭借独特优势脱颖而出。 图片来源:币界网 在当今加密货币领域,交易平台的安全性与便捷性至关重要。XBIT去中心化交易所…...
基于Python+MongoDB猫眼电影 Top100 数据爬取与存储
前言:从猫眼电影排行榜页面(TOP100榜 - 猫眼电影 - 一网打尽好电影 )爬取 Top100 电影的电影名称、图片地址、主演、上映时间和评分等关键信息,并将这些信息存储到本地 MongoDB 数据库中,🔗 相关链接Xpath&…...
Linux文件复制命令精要指南:cp与scp详解
大家好,欢迎来到程序视点!我是你们的老朋友.小二! Linux文件复制命令精要指南:cp与scp详解 一、cp命令(本地文件复制) 核心功能 复制文件/目录到目标路径,支持重命名及批量操作。 关键参数 …...
Qt实现网页内嵌
文章目录 一、环境准备 二、代码实现 三、测试 一、环境准备 首先,确保你的Qt安装包含了QtWebEngine模块。我的Qt是5.12.9并且使用MSVC来编译项目。在项目文件中需要添加以下配置,其中在Qt中配置MSVC,建议去看看这位大佬的博客:…...
Kotlin中 StateFlow 或 SharedFlow 或 LiveData的区别
在Android开发中,处理数据流是常见的需求,特别是在UI更新和数据共享方面。Kotlin提供了几种不同的工具来帮助开发者实现这一需求,包括StateFlow、SharedFlow和LiveData。每种工具都有其特点和使用场景,下面我们将逐一比较它们的区…...
jupyter notebook运行简单程序
一. 使用 cmd 创建虚拟环境 1.创建虚拟环境 (1)创建新的虚拟环境(本项目名设置为zhineng),并设置python版本 conda create -n zhineng python3.6 (2)查看python版本 python --version &am…...
查看Ubuntu版本
1. 使用 lsb_release 命令(推荐) lsb_release -a输出示例: ubuntuVM-0-6-ubuntu:~$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04 LTS Release: 22.04 Codename: jamm…...
《算法导论(第4版)》阅读笔记:p7-p8
《算法导论(第4版)》学习第 5 天,p7-p8 总结,总计 2 页。 一、技术总结 1.算法解决什么问题? DNA测序问题(Dynamic Programming, 动态规划),寻找路径问题,加密问题,利益最大化问题(linear programming, …...
AI笔记-1
Halide Perovskites (HPs) 卤化物钙钛矿 卤化物钙钛矿(HPs)已被 公认为 光伏和发光器件 中最有前途的材料之一 在本观点中,我们将探讨钙钛矿的定义,主要聚焦于由 较重卤素(Cl、Br和I)组成的钙钛矿亚群&…...
【C++重载操作符与转换】成员访问操作符
目录 一、点操作符(.) 1.1 基本概念 1.2 点操作符不能被重载 二、箭头操作符(->) 2.1 基本概念 2.2 箭头操作符的重载 2.3 箭头操作符重载的特殊规则 三、成员指针操作符(.*)和指向成员指针的箭…...
java单元测试代码
import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; import java.util.List;public class UserServiceTest {Testpublic void testSearchUserByTags() {// 模拟标签列表List<String> tagNameList List.of("tag1", "…...
Vue中的过滤器参数:灵活处理文本格式化
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
【神经网络与深度学习】深度学习中的生成模型简介
深度学习中的生成模型 openai 的一个古早介绍 引言 深度学习中的生成模型能够学习数据分布并生成新数据,在人工智能的多个领域中都有重要应用。不同类型的生成模型在原理和结构上各有特点,适用于不同的任务,如图像生成、文本生成和时间序列…...
Docker(三):DockerFile
一、DockerFile介绍 1、DockerFile 介绍 DockerFile 是一种能够被Docker 程序解释的文件(一般为了方便理解称之为“剧本”)。 DockerFile 由一条一条的指令组成,并且有自己的书写格式和支持的命令。当我们需要在容器 镜像中指定自己额外的需…...
使用OpenCV 和 Dlib 实现疲劳检测
文章目录 引言1.相关技术介绍2. 系统原理2.1 眼睛纵横比(EAR)算法2.2 系统工作流程 3.代码解析3.1 关键函数说明3.2 主循环逻辑 4.实际应用效果5.参数调优建议6.总结 引言 疲劳驾驶是交通事故的主要原因之一。本文将介绍如何使用Python和计算机视觉技术构建一个实时疲劳驾驶检…...
Python格式化字符串的四种方法
Python格式化字符串的四种方法 1.使用 % 运算符 %s 是一个字符串的占位符,而 “World” 是替换它的值 print("Hello, %s!" % "World") # 输出:Hello, World!你可以使用多个占位符 注意:多个变量占位,变量要…...
蓝桥杯 18. 积木
积木 原题目链接 题目描述 小明用积木搭了一个城堡。为了方便,小明使用的是大小相同的正方体积木,并将其搭建在一个 n 行 m 列的方格图上。每个积木占据方格图中的一个小格子。 小明的城堡是立体的,可以将积木垒在其他积木上。当某个格子…...
解决因字段过长使MYSQL数据解析超时导致线上CPU告警问题
1.首先发生CPU告警 占有率到98.8% 2.DBA找到最终的原因是这条SQL导致 select * from trade_order_sku_071 where order_id in ( P760205793431071471 ) and user_id in ( 67d9158c000000000e0134ff );” 3.观察系统指标,发现CPU和网络同时飙升,同时网络…...
Python中的客户端和服务端交互的基本内容
目录 网络协议 网络的通信方式 需要安装的组件和需要导入的包模块 安装的组件 导入包模块 如何创建客户端 如何创建服务端 网络协议 IPV4:是互联网协议的第四版,也是目前广泛使用的网络协议。它使用32位地址格式,理论上可以提供约43亿…...
Compose 中使用 WebView
在 Jetpack Compose 中,我们可以使用 AndroidView 组件来集成传统的 Android WebView。以下是几种实现方式: 基础 WebView 实现 Composable fun WebViewScreen(url: String) {AndroidView(factory { context ->WebView(context).apply {// 设置布局…...