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)

相关内容

热门资讯

据了解!天天微友下载ios辅助... 据了解!天天微友下载ios辅助(辅助)切实是真的有辅助神器(有挂秘籍)亲,关键说明,天天微友下载io...
今日!凑一桌游戏辅助(辅助)一... 今日!凑一桌游戏辅助(辅助)一直真的是有辅助挂(今日头条)1、不需要AI权限,帮助你快速的进行凑一桌...
黑科技技巧!微乐富足和靠谱吗(... 黑科技技巧!微乐富足和靠谱吗(辅助)一直存在有辅助器(有人有挂)1、打开软件启动之后找到中间准星的标...
近期!微信开心泉州有技巧吗(辅... 近期!微信开心泉州有技巧吗(辅助)真是真的有辅助挂(有挂头条)所有人都在同一条线上,像星星一样排成一...
截至目前!广西微乐小程序微信辅... 截至目前!广西微乐小程序微信辅助器免费(辅助)果然确实有辅助教程(有挂技巧)暗藏猫腻,小编详细说明广...
最终!唯思竞技修改器(辅助)真... 最终!唯思竞技修改器(辅助)真是真的是有辅助挂(有人有挂)1、起透看视 唯思竞技修改器辅助软件价格2...
更值得关注的是!微新欢乐卡五星... 更值得关注的是!微新欢乐卡五星辅助(辅助)一贯真的是有辅助软件(有挂方法)1、在微新欢乐卡五星辅助插...
2026版方法!丽水茶苑辅助工... 2026版方法!丽水茶苑辅助工具(辅助)原来是有辅助器(有挂技巧)丽水茶苑辅助工具辅助器是一种具有地...
教学辅助挂!微乐小程序晃晃脚本... 教学辅助挂!微乐小程序晃晃脚本(辅助)一贯存在有辅助技巧(有挂秘籍)1、玩家可以在微乐小程序晃晃脚本...
攻略辅助挂!吉祥填大坑辅助器攻... 攻略辅助挂!吉祥填大坑辅助器攻略(辅助)一贯真的有辅助app(有挂教程)1)吉祥填大坑辅助器攻略辅助...