Seite 1 von 1
Django: Darf man aus Django heraus eigene Threads starten
Verfasst: Samstag 13. Juni 2009, 09:38
von Piet Lotus
Hallo zusammen,
ich würde gerne Wissen, wie sich Django mit selbst gestarteten Threads verhält. Bei Java und einem Application-Server wie JBoss darf man aufgrund der darunterliegenden Prozesse und Dienste des Containers keine eigenen Threads starten. Wie sieht es bei Django und z.B. einem Apache aus. Darf ich für langwierige Aufgaben aus dem Django-Quellcode aus eigene Threads anstoßen?
Besten Dank und schönes Wochenende
Piet
Verfasst: Samstag 13. Juni 2009, 10:08
von sma
Ich würde das nicht empfehlen.
Zum einen bin ich mir relativ sicher, dass Django nicht threadsafe ist. Und selbst wenn es das wäre, was ist mit dem Datenbank-Treiber?
Zum anderen funktioniert Django ja nach dem CGI-Prinzip und in der Theorie lebt das Programm nur jeweils so lange, wie ein Request bearbeitet wird. Wenn mod_python oder mod_fcgi die Programme länger am Leben lassen, ist das nur eine Optimierung, aber nichts, auf das man sich verlassen kann.
Im Prinzip gilt somit das selbe wie bei Java.
Ich würde empfehlen, längerfristige Aufgaben in externe Programme auszulagern. Damit diese bequem über den Django-ORM auf die DB zugreifen können, bietet es sich an, hier
custom commands zu bauen. Im Gegensatz zu Java gibt es dafür aber keine fertige Lösung wie z.B. JMS. Entweder man baut sich selbst eine per Polling auf der DB arbeitende Lösung oder googlet noch etwas.
Stefan
Verfasst: Samstag 13. Juni 2009, 23:40
von DatenMetzgerX
Es ist hald abhängig was in den Threads abgehandelt wird, so wie es auch bei JBoss ist. was möchtest du denn in deimen Thread tun?
Verfasst: Mittwoch 17. Juni 2009, 17:49
von Piet Lotus
Hallo und Danke für die Infos...
Ich möchte in meinem Thread größere PDF-Dokumente erzeugen und sie per Mail automatisch versenden...
Viele Grüße
Piet
Verfasst: Mittwoch 17. Juni 2009, 18:00
von nemomuk
Dafür könnte man doch auch irgendeine Art Warteschleife erstellen. Dann per cronjob alle x Minuten in der "Warteschleife" schauen und ggfs. ein Dokument erzeugen und verschicken. Oder evtl. einen eigenen Dienst starten mit dem man über irgendeine eine Schnittstelle kommuniziert.
Verfasst: Mittwoch 17. Juni 2009, 22:16
von apollo13
Das Stichwort heißt message brokers, wenns mehr werden soll. Wenn du nur eine quick&dirty Lösung willst reicht ein Cronjob aus…