Django: Darf man aus Django heraus eigene Threads starten

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

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
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

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
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

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?
Piet Lotus
User
Beiträge: 80
Registriert: Dienstag 14. November 2006, 10:40

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
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

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.
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

Das Stichwort heißt message brokers, wenns mehr werden soll. Wenn du nur eine quick&dirty Lösung willst reicht ein Cronjob aus…
Antworten