Python3.8环境下AsyncElasticsearch使用RequestsHttpConnection的tuple不可await报错求助
报错根因
AsyncElasticsearch是全异步链路实现的ES客户端,内部传输层执行请求时会对连接对象的perform_request方法做await操作,要求该方法必须返回可等待的协程对象。RequestsHttpConnection是纯同步逻辑实现的HTTP连接类,它的perform_request是同步方法,直接返回(status, headers, data)格式的普通元组,并非协程对象,绑定到异步客户端上就会直接触发当前类型错误。
解决操作
- 替换为异步配套连接类:禁止给
AsyncElasticsearch传入同步的RequestsHttpConnection,改用官方提供的异步连接实现AioHttpConnection,初始化代码示例:from elasticsearch import AsyncElasticsearch from elasticsearch.connection import AioHttpConnection es = AsyncElasticsearch( hosts=["ES节点地址"], connection_class=AioHttpConnection ) - 依赖版本校验:检查当前环境安装的
elasticsearch包和aiohttp包版本是否匹配,避免因为异步连接初始化抛错,客户端自动降级使用同步连接实现的异常场景。 - 自定义连接适配:如果有自定义连接逻辑的需求,必须将连接类的
perform_request方法改造为async异步方法,保证方法返回协程对象,不能直接返回同步逻辑产出的元组结果。
内容的提问来源于stack exchange,提问作者user1187968
相关产品推荐
相关产品推荐

