现在需要定时执行一个函数,在linux上可以使用django-crontab这个django插件,非常方便,而且在压力测试中由于调用的是linux底层的命令crontab,所以在压力测试面前比其他的效率都要高.
注意:windows不能使用
Table of Contents
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')
]
注意:
- CORJOBS里可以有多个需要定期执行的方法
- 第一个参数指定周期性,写法与linux本身的命令corntab的写法相同,详情可以参考本博客第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周期性的配置:
比如:
'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
django-crontab 定时执行任务方法_Katios-CSDN博客