django 定时任务
时间: 2023-07-18 08:30:40 浏览: 110
django-crontab 定时执行任务方法的实现
Django 本身不提供定时任务的功能,但是可以通过结合第三方库来实现。以下是一个使用 django-crontab 库实现定时任务的示例:
1. 首先安装 django-crontab:
```
pip install django-crontab
```
2. 在 Django 项目的 settings.py 文件中添加以下配置:
```
INSTALLED_APPS = [
# ...
'crontab',
]
CRONJOBS = [
('*/5 * * * *', 'yourapp.tasks.task1'), # 每5分钟执行一次 task1
('0 1 * * *', 'yourapp.tasks.task2'), # 每天凌晨1点执行 task2
]
```
其中,CRONJOBS 是定时任务的配置,具体格式可以参考 crontab 文档。这里演示了两个定时任务,分别是每5分钟执行一次的 task1 和每天凌晨1点执行的 task2。
3. 在 Django 项目中新建一个名为 tasks.py 的文件,编写定时任务的代码:
```
def task1():
# 在这里编写 task1 的逻辑
pass
def task2():
# 在这里编写 task2 的逻辑
pass
```
4. 在 Django 项目的 urls.py 文件中添加以下配置:
```
from django.urls import path
from crontab.views import run_cron
urlpatterns = [
# ...
path('runcrons/', run_cron),
]
```
这里添加了一个名为 runcrons 的 URL,用于手动执行定时任务。
5. 在 Django 项目的 manage.py 文件中添加以下代码:
```
from crontab import CronTab
cron = CronTab(user='yourusername')
# 将定时任务写入系统的 crontab
for job in settings.CRONJOBS:
cron_job = cron.new(command=f'python {sys.argv[0]} runcrons {job[1]}')
cron_job.setall(job[0])
cron.write()
```
这里使用了系统的 crontab 来实现定时任务。将 Django 项目的定时任务写入系统的 crontab 中,可以保证即使 Django 项目重启,定时任务也不会中断。
6. 启动定时任务:
```
python manage.py crontab add
```
至此,就完成了 Django 的定时任务配置。
阅读全文