Django定时任务框架django-apscheduler的使用
创始人
2024-12-28 14:37:19
0次

1.安装库

pip install django-apscheduler

2.添加 install_app    

django_apscheduler

3.在app下添加一个task.py文件,用来实现具体的定时任务

task.py  def my_scheduled_job():     print("这个任务每3秒执行一次", time.time())

4.在app下创建一个management文件夹,里面包含一个空的__init__.py和一个文件夹commands,commands里面包含一个空的__init__.py和一个start_tasks.py,其中start_tasks.py是主要的启动脚本,结构如下:

 from datetime import datetime from apscheduler.executors.pool import ThreadPoolExecutor from apscheduler.schedulers.blocking import BlockingScheduler from apscheduler.triggers.cron import CronTrigger from apscheduler.triggers.date import DateTrigger from apscheduler.triggers.interval import IntervalTrigger from django.core.management.base import BaseCommand from django_apscheduler.jobstores import DjangoJobStore  from ...tasks import my_scheduled_job, my_scheduled_job1   # # Django manage.py命令:存储定时任务信息 # class Command(BaseCommand):     help = '启动定时任务.'      def handle(self, *args, **options):         # 调度器         scheduler = BlockingScheduler()  # 研发阶段使用         # scheduler = BackgroundScheduler() # 生产阶段使用          # 任务存储         scheduler.add_jobstore(DjangoJobStore(), 'default')          # 配置线程池执行器,限制最大并发数为1,防止并发         executor = ThreadPoolExecutor(max_workers=1)         scheduler.executor = executor          # 注册定义任务         id_print_task = 'print_task__job'         print('开始-增加任务({})'.format(id_print_task))         scheduler.add_job(             my_scheduled_job,             id=id_print_task,             name=id_print_task,             max_instances=1,             replace_existing=True,             trigger=IntervalTrigger(seconds=15, start_date=datetime.now(), ),  # 从当前时间开始,每15秒钟调度一次         )          # 指定某个时间运行         run_date = datetime(2024, 7, 18, 18, 33)         scheduler.add_job(             my_scheduled_job1,             id='id_print_task1',             name='id_print_task1',             trigger=DateTrigger(run_date=run_date),  # 使用 DateTrigger 并设置 run_date             replace_existing=True  # 如果已存在同名任务,则替换它         )          # 指定每天某个时间运行         scheduler.add_job(             my_scheduled_job1,             id='daily_task_at_18_36',             name='Daily Task at 18:36',             trigger=CronTrigger(hour=18, minute=38),  # 使用 CronTrigger 并设置小时和分钟             replace_existing=True  # 如果已存在同名任务,则替换它         )         print('完成-增加任务({})'.format(id_print_task))          # 启动定时任务         try:             scheduler.start()         except KeyboardInterrupt:             scheduler.shutdown() 

5.修改settings.py配置,将时区改为中国,最主要是把USE两项注释掉,否则后面的定时任务的时间会晚八小时!!!!

settings.py  LANGUAGE_CODE = 'zh-hans'  # 中文语言代码  TIME_ZONE = 'Asia/Shanghai'  # 中国上海时区  # USE_I18N = True # # USE_TZ = True

6.添加完成后,做数据库迁移,会生成 表django_apscheduler_djangojob 和 表django_apscheduler_djangojobexecution

python manage.py migrate

7.启动项目,然后启动定时任务:

 python manage.py start_tasks

启动后,任务开始执行,数据库上述两张表会有数据进去,定时任务完成,其他的见后面拓展。

拓展:

django-apscheduler框架还提供了很多操作定时任务的函数。比如:

  • 删除任务
    scheduler.remove_job(job_name)
  • 暂停任务
    scheduler.pause_job(job_name)
  • 开启任务
    scheduler.resume_job(job_name)
  • 获取所有任务
    scheduler.get_jobs()
  • 修改任务
    scheduler.modify_job(job_name)

注:修改任务只能修改参数,如果要修改执行时间的话,有3种方法
第一就把任务删了重新创建,
第二直接操作数据库,
第三用到下面重设任务。

  • 重设任务
    scheduler.reschedule_job(job_name)

scheduler.reschedule_job(job_id="job1", trigger='interval', minutes=1)

相关内容

热门资讯

实测交流透视挂!宝玛大厅ai智... 实测交流透视挂!宝玛大厅ai智能透视挂教程,宝玛大厅破解软件经验(本来有挂辅助)1、每一步都需要思考...
总算了解辅助器!朱雀吴江三缺一... 总算了解辅助器!朱雀吴江三缺一ai智能透视辅助挂技巧,朱雀吴江三缺一好像是有挂(有辅助挂细节)朱雀吴...
今日公布透视!九五至尊大厅ai... 今日公布透视!九五至尊大厅ai智能透视插件,九五至尊大厅有没有透视挂窍门(切实有挂技术)1、在九五至...
玩家必看科普开挂!聚闲麻将ai... 玩家必看科普开挂!聚闲麻将ai智能透视辅助挂软件,聚闲麻将总是真的有挂(有辅助挂方式)聚闲麻将能透视...
据报道开挂!旅游娱乐ai智能开... 据报道开挂!旅游娱乐ai智能开挂工具,旅游娱乐辅助工具演示(一直有挂教学)1、全新机制【旅游娱乐ai...
一分钟揭秘开挂!决胜朋来麻将a... 一分钟揭秘开挂!决胜朋来麻将ai智能透视辅助挂教程,决胜朋来麻将真是真的是有挂(有辅助挂总结)1、首...
如何分辨真伪透视!红牛ai智能... 如何分辨真伪透视!红牛ai智能透视攻略,红牛是不是有挂经验(真是有挂技术)1、操作简单,无需红牛手机...
2分钟细说辅助器!江湖大庆麻将... 2分钟细说辅助器!江湖大庆麻将ai智能透视辅助挂攻略,江湖大庆麻将竟然是真的有挂(有辅助挂头条)1、...
总算清楚透视挂!老夫子厅ai智... 总算清楚透视挂!老夫子厅ai智能透视挂技巧,老夫子厅怎么开挂课程(好像发现有挂)老夫子厅破解侠是真的...
解密关于辅助!菜鸟麻将ai智能... 解密关于辅助!菜鸟麻将ai智能透视辅助挂脚本,菜鸟麻将总是存在有挂(有辅助挂存在)1、用户打开应用后...