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实现标签:设置,django,apscheduler,任务,scheduler,contrib,定时 From: https://www.cnblogs.com/lhg37927/p/17483927.html
在该脚本的app所在urls.py文件中,添加一句导入该文件(导入该文件的啥都行,python解释器的运行机制,当有导入语句的话, 会从上往下执行该py文件)
import .auto_task.run
这些都设置好之后, 当我们在python manage.py runserver的时候,它就自行启动并定时执行该任务了,不用人为干预了