App*_*hon 2 python django multithreading pyqt pyside
我想在Thread中执行django的call_method.这是示例代码:
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.
Run Code Online (Sandbox Code Playgroud)
Django服务器正常启动,但ServerStarter创建了两次.
两个ServerStarter的实例都运行了.
如果我在run方法中注释call_command("runserver",noreload = True),那么只
创建一个线程(这就是我想要的).
提前致谢!
我找到了解决方案(克里斯摩根是对的).这段代码按我的意思运行:
import sys
sys.path.append("/my/django/project/path/")
import threading
# Import my django project configuration settings
from django.core.management import setup_environ, ManagementUtility
from mydjangoprojectname import settings
setup_environ(settings)
class ServerStarter(threading.Thread):
def __init__(self):
super(ServerStarter, self).__init__()
print "ServerStarter instance created"
def run(self):
print "Starting Django Server..."
utility = ManagementUtility()
command = utility.fetch_command('runserver')
command.execute(use_reloader=False)
if __name__ == '__main__':
starter = ServerStarter()
starter.start()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2161 次 |
| 最近记录: |