django中配置apscheduler,并解决运行两次的问题
作者:互联网
创建了一个独立的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本身自己也启动了所以执行了两次,但是我是小白,不是很明白里边的调用过程,先实现功能,其他的以后再说吧
标签:start,py,两次,apscheduler,job,scheduler,django,import,执行 来源: https://www.cnblogs.com/ddzfeng/p/16603050.html