Django如何监听启动,开启另外后台线程?
1. 无法启动的时候另外启动一个后台线程
2. 部分代码如下:
mqtt_bridge/__init__.py
# coding=utf8
from bridge import start
import threading
print 'import %s thread id: %s' % ('bridge.start', threading.current_thread().ident)
start() # 重复启动啊
在Install apps里面加入模块名,在Django启动的时候会自动导入
INSTALLED_APPS = (
# 'jet.dashboard',
# 'jet',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Django rest framework
'rest_framework',
'rest_framework.authtoken',
# my apps
'mqtt_bridge'
)
3. 控制台输出:
import bridge.start thread id: 7124
bridge-54 INFO : MQTT client listen loop start! thread id: 8680
bridge-28 INFO : MQTT client connected with result code: 0
import bridge.start thread id: 8200
bridge-54 INFO : MQTT client listen loop start! thread id: 840
bridge-28 INFO : MQTT client connected with result code: 0
Performing system checks...
4. 很明显这个模块被导入了两次,模块里面的线程也是开启了两个,这样很耗费系统资源。
使用开发模式启动,第一次启动是去解析命令,解析到命令后就开始执行监测命令的进程,然后再启动服务器。
如果使用wsgi服务器运行,那么就会根据worker启动的数量,加载初始化模块多次。
5. 其他解决办法只能去占有端口,然后判断是否已经启动,觉得太低效了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果你想在Django的APP中执行某些初始化工作,应该在APP的app.py中自定义配置类,然后重写ready()方法即可。
Django的应用初始化过程:https://docs.djangoproject.co...
相同的问题,重写了ready方法发现也是启动两次
https://stackoverflow.com/que...
python manage.py runserver --noreload