0

0

Python etcd3 的 Python 异步客户端

舞夢輝影

舞夢輝影

发布时间:2026-02-16 12:25:07

|

346人浏览过

|

来源于php中文网

原创

etcd3异步客户端应选用etcd3-grpc而非asyncio或aiohttp,因其基于grpcio+asyncio原生支持await,需pip install etcd3-grpc并配置grpc端口2379及tls证书;watch需手动重连,lease需持续await keepalive,同步与异步客户端不可混用。

python etcd3 的 python 异步客户端

etcd3 异步客户端用 asyncio 还是 aiohttp?

Python 官方 etcd3 库(etcd3)本身**不是异步的**,它底层基于 requests 同步 HTTP 客户端,直接在 async def 里调用 client.get() 会阻塞事件循环。别指望加个 await 就能跑通——它压根没实现 __aiter__async def 方法。

常见错误现象:RuntimeWarning: coroutine 'Etcd3Client.get' was never awaited,或者更隐蔽的:CPU 占用低但响应延迟高、并发请求实际串行执行。

  • 真正可用的异步方案只有两个:自己用 loop.run_in_executor 包一层(适合轻量过渡)
  • 或换用社区维护的 aioetcd(已归档)或更靠谱的 etcd3-py 的异步分支(注意不是 PyPI 上同名旧包)
  • 目前最稳的选择是 etcd3-grpc —— 它基于 grpcio + asyncio,原生支持 await,且兼容 etcd v3 API

etcd3-grpc 怎么装和连上服务?

etcd3-grpc 不在官方 etcd3 包里,得单独装:pip install etcd3-grpc。它依赖 grpcio,Windows 用户可能遇到编译问题,建议用预编译 wheel(如通过 conda-forge 安装)。

连接时注意:它默认走 gRPC(端口 2379),不是 HTTP(2379 是 HTTPS?错,etcd 默认 gRPC 端口就是 2379;HTTP API 是 2379 重定向或 2378,但 etcd3-grpc 只认 gRPC)。

立即学习Python免费学习笔记(深入)”;

Netty 代码分析 中文WORD版
Netty 代码分析 中文WORD版

本文档主要讲述的是Netty 代码分析;Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序;有需要的朋友可以下载看看

下载
  • 必须确认 etcd server 启用了 gRPC(--listen-client-urls http://0.0.0.0:2379 不够,要 https://... 或明确开启 --listen-client-urls grpc://0.0.0.0:2379;不过多数新版 etcd 默认已开)
  • 证书配置比 HTTP 复杂:若 etcd 开了 TLS,需传 ca_certcert_keycert_cert 参数,不能只靠环境变量
  • 示例连接:
    import etcd3_grpc<br>client = etcd3_grpc.Client(host='localhost', port=2379)<br>value, meta = await client.get('/test')

watch 和 lease 操作为什么总超时或断连?

gRPC 的 watch 是长连接流式响应,但网络抖动或 etcd server GC 会导致流中断。默认情况下,etcd3-grpcwatch 不自动重连,也不带重试逻辑——你拿到的 WatchIterator 一旦抛出 grpc.aio.AioRpcError,就结束了。

lease 同理:lease.grant() 返回的是单次响应,续期(lease.keepalive())才是持续心跳。如果漏掉 keepalive,lease 到期后所有关联 key 立刻被删。

  • watch 必须手动捕获异常并重建流,建议用 async for + try/except 包裹,检测 Code.UNAVAILABLE 后 sleep 再重连
  • lease.keepalive() 返回一个 async iterator,要持续 await anext(),否则心跳停摆;别把它当一次性方法调用
  • watch 的 start_revision 若设得太老,etcd 可能返回 rpc error: code = OutOfRange —— 表示历史版本已被压缩,得用当前 revision 重新 watch

和同步 etcd3 混用会不会出问题?

不会直接 crash,但会破坏预期的并发模型。比如你在同一个进程里,一边用 etcd3.Client(同步)写 key,一边用 etcd3_grpc.Client(异步) watch,看起来没问题——但 watch 流的事件顺序、revision 可见性、甚至 key 的 TTL 刷新行为,在两个客户端间并不严格一致。

尤其当涉及 lease 关联操作时:同步客户端创建的 lease,异步客户端无法直接续期(lease.id 虽可传,但续期接口不互通);反之亦然。

  • 一个进程内,**坚持只用一套客户端**:要么全同步,要么全异步
  • 如果必须桥接(比如 legacy 代码用同步,新模块用异步),key 命名空间要隔离,避免 lease 共享、watch 范围重叠
  • 调试时注意:同步客户端的 get 可能读到异步客户端刚写但尚未 commit 的值(取决于 etcd raft 状态),这不是 bug,是分布式一致性模型的正常表现
事情说清了就结束。异步 etcd 客户端最难缠的从来不是怎么连上,而是 watch 断连时机、lease 心跳节奏、还有 revision 在不同客户端间的“视差”——这些地方一松懈,问题就藏到凌晨三点的告警里。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

391

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

246

2023.10.07

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

348

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

425

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

786

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

356

2025.07.23

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

351

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

339

2023.10.25

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

145

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号