2016-08-07 29 views
0

Ich versuche, einen Hintergrunddienst in Python zu erstellen. Der Dienst wird von einem anderen Python-Programm aufgerufen. Es muss als Daemon-Prozess ausgeführt werden, da es ein schweres Objekt (300 MB) verwendet, das zuvor in den Speicher geladen werden muss. Ich habe mir python-daemon angesehen und habe immer noch nicht herausgefunden, wie es geht. Insbesondere weiß ich, wie man einen Daemon ausführt und regelmäßig selbst etwas tut, aber ich weiß nicht, wie man ihn von einem anderen Programm aus aufrufen kann. Könnten Sie bitte etwas Hilfe geben?Erstellen Sie einen Daemon-Hintergrunddienst?

+0

@mithatkonuk Ich würde Python Daemon System-Daemon wie in dieser Antwort vorgeschlagen bevorzugen: http://stackoverflow.com/questions/1603109/how-to-make-a-python-script-run-like-a-service -oder-Daemon-in-Linux. Gibt es eine Möglichkeit, einen Python-Daemon aufrufbar zu machen, oder ist es notwendig, einen Systemdämon zu verwenden? – lenhhoxung

Antwort

1

Ich hatte eine ähnliche Situation, als ich von einer Web-App auf eine große binäre Matrix zugreifen wollte.

Natürlich gibt es viele Lösungen, aber ich verwendete Redis, ein beliebtes In-Memory-Datenbank/Cache-System, zu speichern und auf mein Objekt erfolgreich zugreifen. Es hat praktische Python-Bindungen (mehrere wahrscheinlich äquivalente Wrapper-Bibliotheken).

Der Hauptvorteil besteht darin, dass beim Ausfall des Dienstes eine Kopie der Daten auf dem Datenträger verbleibt. Außerdem habe ich festgestellt, dass es, wenn es einmal vorhanden ist, für andere Dinge in meiner App verwendet werden könnte (zum Beispiel Sellery schlägt es als Backend vor) und tatsächlich für andere Dienste in irgendeinem anderen nicht verwandten Programm.

+0

Kann Redis mit beliebigen Objekten verwendet werden? Tatsächlich ist mein Objekt ein mathematisches Modell von tensorFlow – lenhhoxung

+0

Nicht beliebig. Dies können Listen, Hashes usw. sein, siehe http://redis.io/topics/data-types. Aber für ein Python-Objekt müssen Sie es pickeln, dann als String speichern und bei Bedarf deserialisieren. Sie können die Objektattribute auch separat speichern, wenn es sich um einfache Datentypen handelt. – JulienD