Kann ich einige code ständig laufen in Django wie ein Dämon
Ich bin mit mod_wsgi für django Website über Apache. Ich habe auch einige Python-code läuft als hintergrund-Prozess (dameon?). Es hält polling-server und fügt Daten in die Django-Modelle. Dies funktioniert gut, aber kann ich mit diesem code ein Teil von meinem Django-Anwendung, und noch in der Lage, die ständig im hintergrund laufen? Es muss nicht sein, ein Prozess per se, sondern eine Kunst, von der Django-Website, die ständig aktiv ist. Wenn ja, könnten Sie mir ein Beispiel oder eine Dokumentation, die mir helfen würde, dies erreichen?
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie entweder setzen Sie einen cron-job läuft, dass einige Funktion, die Sie definiert haben, oder die weiter fortgeschrittenen und wahrscheinlich empfohlene Methode, integrieren Sellerie in Ihrem Projekt (die ist ganz einfach, eigentlich).
Könnte man erstellen Sie einen hintergrund-thread aus dem WSGI-Skript, wenn es das erste mal importiert wird.
Für diese Arbeit, obwohl Sie müsste nur ein Dämon-Prozess, der sonst jeden Prozess wäre, tut die gleiche Sache, die Sie wahrscheinlich nicht wollen.
Wenn Sie über mehrere Prozess-daemon-Prozess-Gruppe, eine alternative zu schaffen, ist ein spezieller daemon-Prozess-Gruppe, die der einzige Zweck ist, die zur Ausführung dieser hintergrund-thread. In anderen Worten, wird der Prozess nicht tatsächlich noch Anfragen.
Können Sie dies tun durch:
Den WSGIImportScript Richtlinie sagt, laden Sie das Skript und führen Sie es zum Start in den Kontext des Prozess-Gruppe "django-jobs'.
Ersparen, mehrere scripts, ich habe darauf hingewiesen, was wäre Ihre ursprüngliche WSGI-Skript-Datei, die Sie für WSGIScriptAlias. Wir wollen es nicht zu laufen, wenn es geladen wird, dass die Richtlinie, obwohl, so tun wir:
Hier sieht es so aus, der name des daemon-Prozess-Gruppe und der nur läuft, wenn gestartet, im speziellen daemon-Prozess-Gruppe, die mit den einzelnen Prozess nur für diese.
Insgesamt sind Sie nur unter Verwendung von Apache als eine große rühmte Prozess-manager, wenn auch eine, die bereits als robust. Es ist ein bisschen übertrieben da dieser Prozess verbraucht zusätzlich Speicher auf diese Annahme und Bearbeitung von Anträgen, aber abhängig von der Komplexität, was du tust, es kann immer noch nützlich sein.
Einen niedlichen Aspekt dabei ist, dass, da es immer noch eine volle Django-Anwendung in dort, Sie könnte Karte bestimmte URLs zu eben diesem Prozess und bieten so eine remote-API zu verwalten oder überwachen die hintergrund-task und was es tut.
Hier werden alle URLs außer für Sachen, die unter /admin ausführen in "django-site', mit /admin in "django-jobs'.
Sowieso, dass die Adressen die konkrete Frage, es zu tun in der Apache mod_wsgi-daemon-Prozess wie gewünscht.
Als wies darauf hin, dass die alternative ist, um eine Befehlszeile-Skript, das festlegt, und lädt Django und macht sich die Arbeit und führen, die von einem cron-job. Ein Kommandozeilen-Skript bedeutet gelegentliche vorübergehende Speicherauslastung, aber die startup-Kosten für den Auftrag höher ist als Bedürfnis, alles zu laden jedes mal.
when_ready
Funktion. Hier ein Beispiel: github.com/benoitc/gunicorn/blob/master/examples/...when_ready
läuft in der gunicorn übergeordneten Prozess. Es ist in der Regel nicht eine gute Idee, um lange läuft Zeug in solch einem übergeordneten Prozess. Diesem übergeordneten Prozess Gabel werden die worker-Prozesse und es können die Auswirkungen von Erben jeder Staat, verursacht durch den hintergrund-thread, auch wenn der hintergrund-thread selbst würde das nicht überleben die Gabel.Ich früher mit einem cron-job, aber ich sage Ihnen, schalten Sie auf Sellerie nach einer Weile.
Sellerie ist der Weg zu gehen. Plus, können Sie damit beauftragt lange asynchronen Prozess, so können Sie die Geschwindigkeit der Anfrage - /Antwort-Zeit.