其他分享
首页 > 其他分享> > django中配置apscheduler,并解决运行两次的问题

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