django后台定时程序
目录
1.django工程分app里面开一个副线程,启动背后程序
(1)在app里面写好定时程序:
D:\WorkSpaces\rmpa-2024-5\server\app_pressure\proce\analy.py:
def fun_analy_pressdata():
'''
定时函数
:return:
'''
# obj_guide = TAnalyGuide()
# obj_guide.fun_init()
while True:
print('dd',datetime.datetime.now())
time.sleep(6)
(2)在apps.py做好线程分配,当工程启动后,改线程在背后进行
D:\WorkSpaces\rmpa-2024-5\server\app_pressure\apps.py:
from django.apps import AppConfig
import threading
class AppPressureConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app_pressure'
def ready(self):
print('启动程序')
# 启动线程
from app_pressure.proce.analy import fun_analy_pressdata # 将导入语句放在函数内部
thread1 = threading.Thread(target=fun_analy_pressdata)
thread1.daemon = True # 守护线程,主线程结束后,子线程也结束
thread1.start()
(3)直接启动:python manage.py runserver 0.0.0.0:8000
我想在Django服务器启动时执行一些代码,但我希望它只运行一次。目前,当我启动服务器时,它会被执行两次。
(django2) D:\WorkSpaces\rmpa-2024-5\server>python manage.py runserver 0.0.0.0:8000
===============install pymysql==============
启动程序
dd 2024-04-25 21:57:14.956299
===============install pymysql==============
启动程序
dd 2024-04-25 21:57:15.488642
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
April 25, 2024 - 21:57:16
Django version 3.2.11, using settings 'server.settings'
Starting development server at http://127.0.0.1:8103/
Quit the server with CTRL-BREAK.
dd 2024-04-25 21:57:20.958007
dd 2024-04-25 21:57:21.495500
2.如何避免AppConfig.ready()方法在Django中运行两次——“--noreload”
使用
python manage.py runserver
Django启动两个进程,一个用于实际的开发服务器,另一个用于在代码更改时重新加载应用程序。您还可以在不使用reload选项的情况下启动服务器,并且只会看到一个正在运行的进程只执行一次:
(django2) D:\WorkSpaces\rmpa-2024-5\server>python manage.py runserver 0.0.0.0:8103 --noreload
===============install pymysql==============
启动程序
dd 2024-04-25 22:02:00.119570
Performing system checks...
System check identified no issues (0 silenced).
April 25, 2024 - 22:02:01
Django version 3.2.11, using settings 'server.settings'
Starting development server at http://0.0.0.0:8103/
Quit the server with CTRL-BREAK.
dd 2024-04-25 22:02:06.131818
dd 2024-04-25 22:02:12.140733
可是这样http://0.0.0.0:8103/ 主进程打不开
3.识别出哪个进程是关键——'RUN_MAIN'
在
Django
中我们可能需要在启动时做某些初始化的动作,通过python manager.py runserver 0:8000
命令来启动Django
开发环境时,实际上Django
启动了两次。第一次启动一个auto-reloader
,第二次才是启动真正的应用。
D:\WorkSpaces\rmpa-2024-5\server\app_pressure\apps.py:
from django.apps import AppConfig
import threading
class AppPressureConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app_pressure'
def ready(self):
if os.environ.get('RUN_MAIN'):
print('启动程序')
from app_pressure.proce.analy import fun_analy_pressdata # 将导入语句放在函数内部
thread1 = threading.Thread(target=fun_analy_pressdata)
thread1.daemon = True # 守护线程,主线程结束后,子线程也结束
thread1.start()
C:\Users\lenovo\Env\django2\Scripts\python.exe D:\WorkSpaces\rmpa-2024-5\server\manage.py runserver 8103
===============install pymysql==============
===============install pymysql==============
启动程序
dd 2024-04-25 22:25:32.836641
Performing system checks...
Watching for file changes with StatReloader
System check identified no issues (0 silenced).
April 25, 2024 - 22:25:34
Django version 3.2.11, using settings 'server.settings'
Starting development server at http://127.0.0.1:8103/
Quit the server with CTRL-BREAK.
[25/Apr/2024 22:25:36] "GET / HTTP/1.1" 200 5564
dd 2024-04-25 22:25:38.842461
dd 2024-04-25 22:25:44.850644
完美!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2023-04-26 【电脑删不掉文件或文件夹】