django-crontab 快速配置,高效执行django的周期性任务

现在需要定时执行一个函数,在linux上可以使用django-crontab这个django插件,非常方便,而且在压力测试中由于调用的是linux底层的命令crontab,所以在压力测试面前比其他的效率都要高.

注意:windows不能使用

Table of Contents

1.安装与配置

2.启动

3.验证

4.更多的配置与定制

4.1周期性的配置:

4.2为周期执行的函数提供参数


1.安装与配置

 首先安装

pip install django-crontab

添加app名称到 settings.py中

INSTALLED_APPS = (
        'django_crontab',
        ...
    )

然后在随意的一个app下的任意一个.py文件中创建一个测试方法,也可以把这个方法放在view.py文件中:

#这是要定期执行的函数
def test():
    #因为真正执行的时候不太方便排查问题,所以建议使用try包裹一下
    try:
        print("啦啦啦啦啦")
    except Exception as e:
        print(e)
    finally:
        print("\n")

在 settings.py中增加一个配置:

#CRONJOBS 这个写法固定
CRONJOBS = [
    #('按照怎样的周期执行', 'App的名称.app下的py文件名称.方法名','>>将输出的log保存的文件目录')
    ('*/5 * * * *', 'test_app.view.test','>>~/test.log')
]

注意:

  1. CORJOBS里可以有多个需要定期执行的方法
  2. 第一个参数指定周期性,写法与linux本身的命令corntab的写法相同,详情可以参考本博客第4项
  3. 第二个参数指定执行的函数
  4. 第三个参数(可选)为保存输出的信息,'>>~/test.log’为输出的路径,也可以使用相对路径,其中‘>>’表示追加写入,’>’表示覆写

2.启动

以上都完成后,需要执行下面的代码:

python manage.py crontab add

这样就可以了

显示当前的定时任务

python manage.py crontab show

删除所有定时任务

python manage.py crontab remove

3.验证

在linux的命令行中输入:

crontab -e

可以看到系统中创建了该定时任务。

4.更多的配置与定制

4.1周期性的配置:

django-crontab 快速配置,高效执行django的周期性任务_第1张图片

比如:

'47 11 * * *' 表示: 每个月_不论几号_不论周几第11小时_第47分钟 执行一次 (也就是每天11:47执行)

'5 * * * *' 表示: 每个月_不论几号_不论周几每个小时_第5分钟 执行一次 (也就是每小时的第5分钟执行)

'*/5 * * * *' 表示: 每个月_不论几号_不论周几每个小时_每隔5分钟 执行一次 (也就是每5分钟执行一次)

'*/10 20-23 * * 6-7' 表示: 每个月_不论几号_周六周日20-23点 每隔10分钟 执行一次 (也就是周末晚上8点到11点,每隔10分钟执行一次)

机智的你们可能发现了,每一项都是"并"的关系,给定具体的值,就是定时,给定 */n ,就是每隔n个时间单位

所以可以通过组合配置出自己想要的周期.不过一般第三个 * 与 第五个 * 只配置一个

4.2为周期执行的函数提供参数

#固定顺序传参数
('0 0 * * 0', 'app名.py文件名.函数名', ['参数1', '参数2']),
#指定参数与值
('0 0 * * 0', 'app名.py文件名.函数名',{'参数1':4,'参数2':'abc'}),

第一种为按照固定的顺序传递参数,第二种为指定参数名并赋值,举例:

#对于函数 test(par1,par2,par3=1,par4='a')

上面两种方法就好像是调用:

#固定顺序传参 ['aa', 22]
test('aa',22)
#指定参数与值 {'par1':'aa','par3':'b'}
test(par1='aa',par3='b')

当然可以两个混用,捎带着保存输出的日志:

('0 0 * * 0', 'app名.py文件名.函数名', ['参数1', '参数2'],{'参数1':4,'参数2':'abc'},'>>~/test.log')

这样的配置就高度自由了

 参考链接:

https://opensource.com/article/17/11/how-use-cron-linux

https://github.com/kraiz/django-crontab

https://linux.die.net/man/1/crontab

https://blog.csdn.net/sinat_21302587/article/details/72831002

https://blog.csdn.net/yongche_shi/article/details/48683529

https://blog.csdn.net/msllws/article/details/80931675

你可能感兴趣的:(python)