创建了一个独立的app,准备把定时器执行的内容放在这里
python manage.py startapp cron_jobs
在应用目录下创建目录 autotask
1.创建task.py文件,写入要执行的内容
# -*- coding:utf-8 -*-
"""
" Description: 需要执行的计划任务函数放这里
"
" File : tasks.py.py
" Autho: ddzfeng
" Date : 2022-08-19
"""
import time
def hello():
print('执行计划任务执行at:%s' % time.asctime())
print("hello world,间隔1分钟执行一次")
def hello2():
print('执行计划任务执行at:%s' % time.asctime())
print("第二个计划任务的执行,指定时间运行")
2.创建updater.py文件,指定启动定时器和要执行的内容
# -*- coding:utf-8 -*-
"""
" Description: 计划任务的启动和指定制定运行方式
"
" File : updater.py.py
" Autho: ddzfeng
" Date : 2022-08-19
"""
from apscheduler.schedulers.background import BackgroundScheduler
from corn_jobs.autotask.tasks import hello,hello2
def start():
# intitialise
scheduler = BackgroundScheduler()
# Create jod
scheduler.add_job(hello, 'interval', minutes=2) # this job is excecute every one minutes
# scheduler.add_job(hello2, 'interval', minutes=2) # this job is excecute every one minutes
scheduler.add_job(hello2, 'cron', hour=17, minute=15, second=27,id='hello2', replace_existing=True,misfire_grace_time=200, start_date='2022-1-24 00:00:00')
# # start job
scheduler.start()
# scheduler.shutdown()
3.在本应用的 app.py启动(下边ready函数如果不用这个写法也能直接执行,但是会执行2次,或者使用 manage.py runserver --noreload 也行,但是。。。)
from django.apps import AppConfig
from .autotask import updater
import os
class CornJobsConfig(AppConfig):
name = 'corn_jobs'
run_already = False
def ready(self):
run_once = os.environ.get('CMDLINERUNNER_RUN_ONCE')
if run_once is not None:
return
os.environ['CMDLINERUNNER_RUN_ONCE'] = 'True'
# The code you want to run ONCE here
updater.start()
4.在setting.py中加入应用
INSTALLED_APPS = [
。。。
'corn_jobs.apps.CornJobsConfig',
]
5.后期使用数据库后准备尝试把需要执行的任务,及执行方式放入到数据库中,通过数据库查询的方法将需要自信的内容以及执行的方式进行管理,
但是不确定是否可以,后续再更新。
上面的信息部分是从其他网站查询出来的,部分是自己写的,关于执行两次的问题应该是Django在启动的时候初始化应用的时候被启动了,然后scheduler本身自己也启动了所以执行了两次,但是我是小白,不是很明白里边的调用过程,先实现功能,其他的以后再说吧
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步