Ich würde die call_method des django in einem Thread ausführen. Diese ist der Beispielcode:Problem mit django call_command in einem Thread
import sys
sys.path.append("/my/django/project/path/")
import threading
import time
# Import my django project configuration settings
from django.core.management import setup_environ
from mydjangoprojectname import settings
setup_environ(settings)
from django.core.management import call_command
class ServerStarter(threading.Thread):
def __init__(self):
super(ServerStarter, self).__init__()
print "ServerStarter instance created"
def run(self):
print "Starting Django Server..."
call_command("runserver", noreload=True)
if __name__ == '__main__':
starter = ServerStarter()
starter.start()
------------------------------
OutPut:
ServerStarter instance created
Starting Django Server...
ServerStarter instance created
Starting Django Server...
Validating models...
0 errors found
Django version 1.2.3, using settings 'mydjangoprojectname.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
Django-Server ordnungsgemäß gestartet wird, aber ServerStarter wird zweimal erstellt.
Und beide ServerStarter Instanzen laufen.
Wenn ich call_command ("runserver", noreload = True) in der run-Methode kommentieren, dann wird nur
ein Thread erstellt (und das ist was ich will).
Vielen Dank im Voraus!
Seien Sie sich bewusst, dass das nicht eine sehr nette Art und Weise ist, es zu tun; Was ist, wenn Port 8000 belegt ist? Oder was, wenn etwas anderes Port 8000 möchte? Verwenden Sie mindestens eine halb-zufällige Portnummer. –
Das Gleiche passiert mit 'Multiprocessing' anstelle von' threading'. –