在ES批量插入数据超时时自动重试
当我们使用ES批量插入数据的时候,一般会这样写代码:
from elasticsearch import Elasticsearch,helpers es =Elasticsearch(hosts=[{'host':'localhost','port':9200}]) def gendata(): mywords =['foo','bar','baz'] for word in mywords: yield {"_index":"mywords","_type":"document","_type":"document","doc":{"word": word}} helpersbulk(es,gendata())
但当ES的负荷过大时,这种写法可能会抛出连接超时的异常。
为了解决这个问题,在初始化ES连接对象时,可以设置一个更大的超时时间:
es = Elasticsearch(hosts=[{'host': 'localhost', 'port': 9200}], timeout=60)
但有时候,即时设置为60秒还是有可能遇到超时异常,但这个超时时间并非越大越好,所以最好能够让ES在遇到超时的情况下自动重试。
在创建ES连接对象时,还可以再加两个参数,实现超时自动重试3次:
es = Elasticsearch(hosts=[{'host': 'localhost', 'port': 9200}], timeout=60, max_retries=3, retry_on_timeout=True)
通过添加 max_retries
和 retry_on_timeout
两个参数,就能实现超时自动重试了。
如果你直接看ES的文档,你可能会找不到这两个参数,如下图所示。
这并非是ES的文档有问题,而是因为这两个参数隐藏在 **kwargs
里面,如下图所示。
点进 Transport
就可以看到这两个参数:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
2019-01-16 form组件之modelForm
2019-01-16 关于form组件的补充-------formChoice
2019-01-16 stark组件之创建