elasticsearch,Python,Asynchronous,elasticsearch" /> elasticsearch,Python,Asynchronous,elasticsearch" />

是否有支持异步请求的Python ElasticSearch客户端?

是否有支持异步请求的Python ElasticSearch客户端?,python,asynchronous,elasticsearch,Python,Asynchronous,elasticsearch,我正在寻找一个可以发出异步请求的ElasticSearch Python客户端。例如,我想写这段代码 query1_future = es.search('/foobar', query1_json) query2_future = es.search('/baz', query2_json) # Submit query 2 right after query 1, don't wait for its response query1 = query1_future.get() query2

我正在寻找一个可以发出异步请求的ElasticSearch Python客户端。例如,我想写这段代码

query1_future = es.search('/foobar', query1_json)
query2_future = es.search('/baz', query2_json) # Submit query 2 right after query 1, don't wait for its response
query1 = query1_future.get()
query2 = query2_future.get()
但是,我没有看到任何客户机(例如pye或)支持这一点。此外,我熟悉的这两种方法将请求逻辑与响应处理逻辑结合起来,因此自己修改它们似乎很困难。也许一个足够的临时解决方案是使用异步版本的请求


<>也值得指出的是,弹性搜索的<>代码> MyStase<代码>可能是一个更好的执行选项,但是对于实际应用程序,它需要一些代码重构。

您也可以考虑以下选项来执行I/O,而不使用现有客户端阻止主执行进程:

  • 在Jython或IronPython上使用多线程(它们没有GIL,并利用多个CPU核)
  • 在Python3上使用ProcessPoolExecutor
  • 与套接字一起使用可强制现有套接字,这些套接字实际上使客户端异步,但也请求一些附加代码来管理结果

Gevent使用是最轻量级的(对于RAM/CPU资源),允许处理最密集的I/O,但它也是列出的解决方案中最复杂的。还要注意的是,它在单进程中工作,为了利用多核的优势,应该使用包。

有这样一个功能。

我还没有使用它,但我发现:


我的建议是坚持卷发。有太多不同的方法、过滤器和查询,以至于各种“包装器”很难重新创建所有功能。在我看来,这类似于在数据库中使用ORM……在易用性中获得的东西在灵活性/原始能力中失去

试一下卷发,看看它对你有什么好处。如果使用JSON,您可以使用外部JSON格式化程序检查您的JSON、邮件列表以查找示例以及文档是否正常。

我已经讨论过了。它具有更友好的PEP8界面、测试覆盖率(单元和集成)以及对ESV1.x的支持


这项工作仍在进行中,但对于使用Twisted的人来说可能是一个不错的选择。

如果您使用Twisted,这是一个很好的库。有一个基于asyncio的官方异步Elasticsearch客户端:


这是一个老问题,但现在在2019年,有了官方的异步包装程序包


我成功地使用了ES 5.x,但问题是5.x分支没有得到维护

嘿!我负责维护Python客户机。上述软件包已弃用,将Asyncio与Elasticsearch一起使用的官方方法是通过“Elasticsearch”软件包中的AsyncElasticsearch: