2013-10-09 4 views
8

Я ищу клиента Python ElasticSearch, который может выполнять асинхронные запросы. Например, я хотел бы написать этот код,Есть ли клиент Python ElasticSearch, который поддерживает асинхронные запросы?

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 может быть более эффективным, но для реальных приложений ему потребуется некоторая реструктуризация кода.

ответ

2

Вы также можете рассмотреть следующие варианты операций ввода/вывода без блокировки основного процесса выполняющийся с использованием существующих клиентов:

  • Использование Многопоточность на Jython или IronPython (они не имеют GIL и использовать несколько процессорных ядер)
  • Использование ProcessPoolExecutor на Python3
  • Использование gevent с сокетами monkey pathching, чтобы заставить существующие clients work with gevent сокеты, фактически делает клиент асинхронно, но и запросить дополнительный код для управления результатами

Использование Gevent является самым легким (для ресурсов ОЗУ/ЦП) и позволяет обрабатывать самые интенсивные операции ввода-вывода, но также является самым сложным среди перечисленных решений. Также обратите внимание, что он работает в одном процессе и используется преимущество нескольких ядер multiprocessing.

0

Мое предложение просто придерживаться керлинг все. Существует так много разных методов, фильтров и запросов, которые различные «обертки» нелегко воссоздают все функциональные возможности. На мой взгляд, это похоже на использование ORM для баз данных ... что вы получаете в простоте использования, которое вы теряете в гибкости/сырой мощности.

Дайте CURL попробовать некоторое время и посмотреть, как это относится к вам. Вы можете использовать внешние форматиры JSON для проверки своего JSON, списка рассылки, чтобы искать примеры, и документы одобрены, если вы используете JSON.

1

Я разветвил txes на txes2. Он имеет более дружественный интерфейс PEP8, зону тестирования (блок и интеграцию) и поддержку ES v1.x.

Продолжается работа, но, вероятно, хороший выбор для людей, использующих Twisted.

Смежные вопросы