python - Django如何監(jiān)聽啟動(dòng),開啟另外后臺(tái)線程?
問題描述
1. 無法啟動(dòng)的時(shí)候另外啟動(dòng)一個(gè)后臺(tái)線程2. 部分代碼如下:mqtt_bridge/__init__.py
# coding=utf8from bridge import startimport threadingprint ’import %s thread id: %s’ % (’bridge.start’, threading.current_thread().ident)start() # 重復(fù)啟動(dòng)啊
在Install apps里面加入模塊名,在Django啟動(dòng)的時(shí)候會(huì)自動(dòng)導(dǎo)入
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. 控制臺(tái)輸出:
import bridge.start thread id: 7124bridge-54 INFO : MQTT client listen loop start! thread id: 8680bridge-28 INFO : MQTT client connected with result code: 0import bridge.start thread id: 8200bridge-54 INFO : MQTT client listen loop start! thread id: 840bridge-28 INFO : MQTT client connected with result code: 0Performing system checks...4. 很明顯這個(gè)模塊被導(dǎo)入了兩次,模塊里面的線程也是開啟了兩個(gè),這樣很耗費(fèi)系統(tǒng)資源。5. 其他解決辦法只能去占有端口,然后判斷是否已經(jīng)啟動(dòng),覺得太低效了。
參考:從Django啟動(dòng)守護(hù)進(jìn)程
問題解答
回答1:如果你想在Django的APP中執(zhí)行某些初始化工作,應(yīng)該在APP的app.py中自定義配置類,然后重寫ready()方法即可。
Django的應(yīng)用初始化過程:https://docs.djangoproject.co...
