Gibt es einen Python ElasticSearch-Client, der asynchrone Anforderungen unterstützt?

8

Ich suche nach einem ElasticSearch Python-Client, der asynchrone Anfragen stellen kann. Zum Beispiel möchte ich diesen Code schreiben,

%Vor%

Ich sehe jedoch keine Kunden (z. B. PyES oder den offiziellen Client ), die dies unterstützen. Außerdem koppeln die beiden, mit denen ich vertraut bin, die Anforderungslogik mit der Antwortverarbeitungslogik, so dass es schwierig erscheint, sie selbst zu modifizieren. Vielleicht wäre eine ausreichende Übergangslösung die Verwendung der asynchronen Version von Requests grequests ?

Es ist auch erwähnenswert, dass ElasticSearch _msearch möglicherweise eine leistungsstärkere Option ist, aber für echte Anwendungen eine Code-Umstrukturierung erforderlich macht.

    
gatoatigrado 09.10.2013, 18:56
quelle

7 Antworten

2

Sie können auch die folgenden Optionen zum Ausführen von E / A in Betracht ziehen, ohne den Hauptausführungsprozess mit vorhandenen Clients zu blockieren:

  • Verwenden Sie Multithreading auf Jython oder IronPython (sie haben keine GIL und nutzen mehrere CPU-Kerne)
  • Verwenden Sie ProcessPoolExecutor für Python3
  • Benutze gevent mit Sockets monkey pathing , um existente Clients zu zwingen, mit gevent Sockets zu arbeiten, die den Client tatsächlich asynchron machen, aber auch Anfragen stellen etwas zusätzlichen Code, um Ergebnisse zu verwalten

Die Verwendung von Gevent ist das leichteste (für RAM / CPU-Ressourcen) und ermöglicht die Verarbeitung der intensivsten I / O, ist aber auch die komplexeste unter den aufgeführten Lösungen. Beachten Sie auch, dass es in dem einzelnen Prozess funktioniert und den Vorteil von mehreren Kernen zu verwenden Multiprocessing Paket sollte verwendet werden.

    
luart 25.01.2014 00:05
quelle
1

Ich habe Txes in txes2 gegabelt . Es bietet eine mehr PEP8-freundliche Schnittstelle, Testabdeckung (Einheit und Integration) und Unterstützung für ES v1.x.

Noch immer in Arbeit, aber wahrscheinlich eine gute Wahl für Leute, die Twisted benutzen.

    
lextoumbourou 31.01.2015 03:24
quelle
0

Es gibt diesen Tornado-Async-Client für ES .

    
matagus 27.01.2014 16:50
quelle
0

Ich habe es noch nicht benutzt, aber ich habe folgendes gefunden:

Ссылка

    
jcollie 06.02.2014 03:53
quelle
0

Mein Vorschlag ist, einfach bei CURLing alles zu bleiben. Es gibt so viele verschiedene Methoden, Filter und Abfragen, dass es für verschiedene "Wrapper" schwierig ist, alle Funktionen neu zu erstellen. Meiner Ansicht nach ist es vergleichbar mit der Verwendung eines ORM für Datenbanken ... Was Sie an Benutzerfreundlichkeit gewinnen, Sie verlieren an Flexibilität / roher Macht.

Gib CURL eine Weile und sieh zu, wie es dich behandelt. Sie können externe JSON-Formatierer verwenden, um Ihren JSON zu überprüfen, die Mailingliste, um nach Beispielen zu suchen, und die Dokumente sind in Ordnung, wenn Sie JSON verwenden.

    
Brian Anderson 16.02.2014 04:39
quelle
0

Twistes ist eine gute Bibliothek, wenn Sie twisted verwenden Ссылка

    
Eran H. 24.02.2017 22:15
quelle
0

Ich bin gerade auf diese Frage gestoßen. Es gibt einen offiziellen asynchronen Elasticsearch-Client, der auf asyncio basiert:

Ссылка

    
Tomáš Linhart 10.03.2018 15:08
quelle