【问题标题】:Is there a Python ElasticSearch client that supports asynchronous requests?是否有支持异步请求的 Python ElasticSearch 客户端?
【发布时间】:2013-10-17 07:14:25
【问题描述】:

我正在寻找可以发出异步请求的 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()

但是,我没有看到任何支持此功能的客户端(例如 PyES 或 official client)。此外,我熟悉的两个将请求逻辑与响应处理逻辑结合起来,因此自己修改它们似乎很困难。也许一个足够的临时解决方案是使用异步版本的请求,grequests

另外,值得指出的是,ElasticSearch 的 _msearch 可能是一个性能更好的选项,但对于实际应用程序,它需要一些代码重组。

【问题讨论】:

    标签: python asynchronous elasticsearch


    【解决方案1】:

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

    • 在 Jython 或 IronPython 上使用多线程(它们没有 GIL 并利用多个 CPU 内核)
    • 在 Python3 上使用 ProcessPoolExecutor
    • 使用 gevent 和套接字 monkey pathching 来强制现有的 clients work with gevent 套接字实际上使客户端异步但还请求一些额外的代码来管理结果

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

    【讨论】:

      【解决方案2】:

      【讨论】:

        【解决方案3】:

        我还没用过,但我发现了这个:

        https://github.com/jkoelker/txes

        【讨论】:

          【解决方案4】:

          我的建议是坚持 CURLing 一切。有太多不同的方法、过滤器和查询,以至于各种“包装器”很难重新创建所有功能。在我看来,这类似于将 ORM 用于数据库……您在易用性方面获得的收益会在灵活性/原始能力方面有所损失。

          试一试 CURL,看看效果如何。您可以使用外部 JSON 格式化程序来检查您的 JSON,使用邮件列表查找示例,如果您使用 JSON,文档也可以。

          【讨论】:

            【解决方案5】:

            我已经将txes 分叉成txes2。它具有更 PEP8 友好的界面、测试覆盖率(单元和集成)以及对 ES v1.x 的支持。

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

            【讨论】:

              【解决方案6】:

              Twistes 是一个很好的库,如果你使用的是 twisted

              【讨论】:

                【解决方案7】:

                刚刚遇到这个问题。官方有一个基于asyncio的异步Elasticsearch客户端:

                https://github.com/elastic/elasticsearch-py-async

                【讨论】:

                【解决方案8】:

                这是一个较老的问题,但现在在 2019 年,有官方的异步包装器包。 https://github.com/elastic/elasticsearch-py-async

                我已经成功地使用了 ES 5.x,但问题是 5.x 分支没有得到维护https://github.com/elastic/elasticsearch-py-async/issues/46

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-09-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-04-12
                  • 1970-01-01
                  • 2018-05-31
                  • 2021-02-08
                  相关资源
                  最近更新 更多