Ich verwende Redis zusammen mit meiner Tornado-Anwendung mit dem Asyc-Client Brukva, als ich mir die Beispiel-Apps auf der Brukva-Site anschaute, machen sie eine neue Verbindung mit der Methode init in Websocket
%Vor%ist im Fall von Websocket gut, aber wie man es in der üblichen Tornado RequestHandler-Post-Methode behandelt, sagen lange Polling-Operationen (publish-subscribe-Modell) . Ich mache neue Client-Verbindung in jeder Post-Methode von Update-Handler ist dies der richtige Ansatz? Wenn ich an der Redis-Konsole checke, sehe ich, dass Clients in jeder neuen Postoperation zunehmen.
Hier ist ein Beispiel meines Codes.
%Vor%Ich schätze es, wenn Sie einen Beispielcode für einen ähnlichen Fall bereitstellen.
Ein bisschen spät, aber ich benutze tornado-redis . Es funktioniert mit Tornados ioloop und dem Modul tornado.gen
Installieren Sie tornadoredis
Es kann von pip
installiert werden %Vor%oder mit setuptools
%Vor%Aber du solltest das wirklich nicht tun. Sie könnten das Repository auch klonen und extrahieren. Dann führe
aus %Vor%Verbinden Sie sich mit redis
Der folgende Code wird in main.py oder äquivalent verwendet
%Vor%redis.connect wird nur einmal aufgerufen. Es ist ein blockierender Anruf, daher sollte er vor dem Start des Haupt-Iloops aufgerufen werden. Dasselbe Verbindungsobjekt wird von allen Handlern gemeinsam genutzt.
Sie können es Ihren Anwendungseinstellungen wie
hinzufügen %Vor%Verwenden Sie tornadoredis
Die Verbindung kann in Handlern in self.settings['redis']
verwendet werden oder sie kann als eine Eigenschaft von BaseHandler und der Unterklasse dieser Klasse für andere Request-Handler hinzugefügt werden.
Um mit redis zu kommunizieren, werden die Dekoratoren tornado.web.asynchronous
und tornado.gen.engine
verwendet
Zusätzliche Informationen
Weitere Beispiele und andere Funktionen wie Verbindungspooling und Pipelines finden Sie im github repo.
Sie sollten die Verbindungen in Ihrer App bündeln. da es so aussieht, als würde brukva dies nicht automatisch unterstützen (redispy unterstützt dies, blockiert aber von Natur aus, so dass es nicht gut mit Tornado zusammenpasst), müssen Sie Ihren eigenen Verbindungspool schreiben.
Das Muster ist jedoch ziemlich einfach. etwas in dieser Richtung (das ist kein echter Betriebscode):
%Vor%es kann ein bisschen schwieriger sein, aber das ist die Hauptidee.
Tags und Links python tornado redis publish-subscribe