您的位置:

Django-crontab详解

一、简介

django-crontab是一个在Django项目中使用的基于系统定时任务的任务调度应用,可以使用Python的Crontab来实现实现周期性的高级任务调度,一般适用于需要定期执行特定任务的情况下。

该应用旨在使开发人员能够将必须运行的定期任务与应用集成,并确保这些任务始终运行。

二、快速上手

使用该应用需要先安装django-crontab,安装方式如下:


pip install django-crontab

安装完成后,在Django项目的settings.py文件内添加如下行:


INSTALLED_APPS = [
    ...
    'django_crontab',
]

                                                          # 其他设置
CRONJOBS = [
    ('*/1 * * * *', 'myproject.myapp.cron.my_scheduled_job'),
    ('0 0 * * *', 'myproject.myapp.cron.my_scheduled_job'),
]

以上代码表示了一个基本的定期任务,表示每分钟执行一次定时任务,另外一个是每天的00:00执行一次定时任务,函数my_scheduled_job是你要执行的函数。*

三、使用实例

1. 周期性任务

使用django-crontab可以很方便地使用Python的Crontab来实现各种周期性的任务调度。

我们可以设置如下的定期任务,每天中午12:30 PM执行一个定时任务:


CRONJOBS = [
    ('30 12 * * *', 'myproject.myapp.cron.my_scheduled_job')
]

以上代码表示的是cron表达式的格式,30表示30分钟,12表示12小时(中午12点),星号表示允许在任何日子和月份内执行任务。

同时也可以设置一个月度计划的任务,例如,每月的10号执行一次:


CRONJOBS = [
    ('0 0 10 * *', 'myproject.myapp.cron.my_scheduled_job')
]

2. 执行管理命令

django-crontab不仅可以让你的项目执行特定的函数,还可以让你在管理命令上使用。

在settings.py的CRONJOBS中添加下面代码:


CRONJOBS = [
    ...
    ('*/1 * * * *', 'myproject.myapp.cron.my_scheduled_job'),
    ('0 0 * * *', 'myproject.myapp.cron.my_scheduled_job'),
    ('0 0 * * *', 'python manage.py clearsessions'),
    ('0 0 * * *', 'python manage.py clearcache'),
    ('0 0 * * *', 'python manage.py update_index'),
]

在示例中,可以看到一些基本的管理命令,如清除缓存等,在CRONTAB中也可以在末尾添加这些任务。

3. 发送定时邮件

如果你需要发送定时邮件,使用django-crontab也可以实现它。

需要进行以下几步操作:

第一步,在settings.py中配置邮件相关设置如下:


CRONTAB_DJANGO_SETTINGS_MODULE = ‘my_project.settings’
CRONTAB_EMAIL = “foo@bar.com"
CRONTAB_USE_HTTPS = True

第二步,设置定期任务如下:


'0 0 * * *', 'python manage.py send_email --subject “my_subject” --text “my_text”'

注意,在定期任务中调用了send_email函数,因此需要在Python代码中创建这个函数,如下所示:


def send_email(subject, text):
    from django.core.mail import send_mail
    send_mail(subject, text, 'from@example.com', ['to@example.com'], fail_silently=False) 

四、注意事项

1. 安装完 django_crontab 应用之后,需要重新运行一遍 python manage.py runserver ,才能够看到新添加的 crontab 任务。

2. 运行定时任务时,默认为 debug=False 。

3. 不支持用逗号分割多个条件

4. django-crontab内置了一个很强大的日志工具,可以帮助你追踪问题。

五、总结

本文简单介绍了Django中的定时任务调度器django-crontab的基础知识,包括使用方法,注意事项和实例。希望可以帮助到Django开发者,提高代码的效率和性能。