python - Django如何监听启动,开启另外后台线程?

 2012-末日审判 发布于 2022-10-25 17:07

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. 很明显这个模块被导入了两次,模块里面的线程也是开启了两个,这样很耗费系统资源。

5. 其他解决办法只能去占有端口,然后判断是否已经启动,觉得太低效了。

参考:从Django启动守护进程

1 个回答
  • 如果你想在Django的APP中执行某些初始化工作,应该在APP的app.py中自定义配置类,然后重写ready()方法即可。

    Django的应用初始化过程:https://docs.djangoproject.co...

    2022-10-26 23:25 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有