스레드 내에서 장고의 call_method를 실행하고 싶습니다. 이 샘플 코드입니다 :스레드 내의 django의 call_command에 문제가 있습니다.
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.
장고 서버가 제대로 시작하지만 ServerStarter 두 번작성됩니다.
그리고 두 ServerStarter 인스턴스가 모두 실행됩니다.
run 메소드에서 call_command ("runserver", noreload = True)에 주석을 달면
하나의 스레드 만 생성됩니다.
미리 감사드립니다.
아주 좋은 방법은 아닙니다. 포트 8000을 가져 가면 어떨까요? 또는 다른 것이 포트 8000을 원하면 어떻게 될까요? 최소한 세미 임의의 포트 번호를 사용하십시오. –
'threading' 대신에'multiprocessing'을 사용하면 같은 일이 발생합니다. –