Apschedule 用法请自行百度
本文解决 Apschedule 多次调用任务时,出现多个任务列表的问题
task.py
# Django 项目启动时,自动执行该任务
import os,django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project.settings") # project_name 项目名称
django.setup()
from apscheduler.schedulers.blocking import BlockingScheduler
import threading
sched = BlockingScheduler(daemonic=False)
def do_something():
# 任务 可以在里面添加删除任务
# 比如 sched.get_job(Apschedule 的方法及参数自行百度)
# 比如 sched.add_job(Apschedule 的方法及参数自行百度)
# 比如 sched.remove_job(Apschedule 的方法及参数自行百度)
pass
# 开启任务
try:
t = threading.Thread(target=sched.start, args=())
t.start()
except Exception as e:
logger.info('Scheduler is already running')
此时其他文件可自行调用task.py文件的sched 来进行任务的相关操作(添加/获取/删除任务等),而只会产生一个任务列表。
新的思路
把下面的初始化代码
# 开启任务
do_something()
try:
t = threading.Thread(target=sched.start, args=())
t.start()
except Exception as e:
logger.info('Scheduler is already running')
放到中间件 __init__(self)
中运行,这样就只在服务器的第一次请求时执行一次
class MyMiddleware(object):
def __init__(self):
import threading
# 添加定时任务
from task import sched, do_something
try:
do_something()
print(sched.get_jobs())
print('Task Start before')
t = threading.Thread(target=sched.start, args=())
t.start()
print('Task Start after')
except Exception as e:
print('Scheduler is already running')