django 设置定时任务

django设置定时任务,网上百度了好几种方式,试了这两种方式,简单有效:

例如,我们要设置最简单的执行场景,5s输出一次helloworld。

(1)通过while True设置定时任务

import time
def run():
    print("hello,world")

if __name__ == '__main__':
    while True:
        run()
        time.sleep(5)

  

(2)依赖django_apscheduler  插件

 

Django 启动定时任务使用django_apscheduler 插件

1.安装django_apscheduler  插件

 Pip install  django_apscheduler

2 . django_apscheduler 作为一个产品在settings INSTALLED_APPS 中注册

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "django_apscheduler",
]

  

3 . python manage.py migrate  直接执行数据库迁移命令,该命令会创建2张表,定时任务以及执行情况会被存储在数据库中,

 

第一张表用于存储所有的定时任务,

 第二张表用于存储定时任务的执行情况

 

4 . 在你想要创建定时任务的app的目录下,创建任意的一个名称的py文件,在该文件内编写定时任务相关的代码

# 这里是需要定时执行的脚本代码

def run():
    print("hello,world")

#这里是创建django_apscheduler 任务的固定代码
from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore, register_job

# 1.实例化调度器
scheduler = BackgroundScheduler()

# 2.调度器使用DjangoJobStore()
scheduler.add_jobstore(DjangoJobStore(), "default")


# 3.设置定时任务,选择方式为interval,时间间隔为10s
  date:希望在某个时间仅运行一次,# 例如在2023-04-14 20:12:00 仅执行一次   interval:要以固定的时间间隔运行作业时使用, # 任务隔10分钟执行一次,还可以设置days、hours、seconds参数也可以设置日期范围,start_date-end_date   cron:每天固定时间执行任务, 例如每天9点30分10秒 执行一次,
@register_job(scheduler, 'cron', hour='9', minute='30', second='10',id='task_time')
try: @register_job(scheduler, "interval", seconds=10, replace_existing=True) def my_job(): # 这里写你要执行的任务 print('我是定时任务') run()
except Exception as e: print(e) # 遇到错误,停止定时器 scheduler.shutdown()

# 4.开启定时任务
scheduler.start()
 

5.让程序跑起来,也就是在服务启动的时候,就开始运行该定时任务(如果不设置触发,上边的所有努力就都白干了)

利用python的import实现
在该脚本的app所在urls.py文件或者项目的urls.py中,导入该文件(导入该文件的啥都行,python解释器的运行机制,当有导入语句的话, 会从上往下执行该py文件)


这些都设置好之后, 当我们在python manage.py runserver的时候,它就自行启动并定时执行该任务了,不用人为干预了
posted @ 2023-06-15 20:15  往昔遗忘  阅读(2428)  评论(1编辑  收藏  举报