Django Apschedule 实现多次调用,只产生一个定时任务列表

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')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容