1、前言。Python是一种解释型脚本语言,可以应用于以下领域:[1]
web 和 Internet开发
科学计算和统计
人工智能
教育
桌面界面开发
软件开发
后端开发
网络爬虫
在做 django 开发需求时,多多少少都会遇到需要定时任务的功能,比如定时执行任务,检查订单之类的。可能是一段时间,比如每隔 10分钟执行一次,也可能是定点时间,比如 14:00 执行,也可能是长时间,比如每周几,每个月的哪一天等。查看了一下相关资料, django 定时任务 django-crontab 库比较多教程和资料,虽然 star 数才五百,但是 API 接口比较简单,接入也很方便,功能也很全面,当然,也存在一此无法解决的问题,使用时需要注意的。
2、使用教程
1.安装:
2.添加配置到 settings.py INSTALLED_APPS 中
3.编写定时函数:
定时任务可以分成两种,一种是执行自定义的mange.py的命令,另一种是执行自定义函数。
在django的app中新建一个myapp/cron.py文件,把需要定时执行的代码放进去
示例:
4.在 settings.py 中增加CRONJOBS配置
也可以定义一些关键字参数,有2种格式:
格式1:
要求:cron计时通常格式(有关更多示例,请参阅 Wikipedia 和 crontab.guru)
要求:python模块路径下待执行定时任务
可选:特定于定时任务的后缀(例如,将 out/err 重定向到文件,默认值为'')
示例:
注意: >> 表示追加写入,> 表示覆盖写入。
格式2:
要求:cron计时通常格式
要求:python模块路径下待执行定时任务
可选:方法的位置参数列表(默认值:[])
可选:方法的关键字参数的dict(默认值:{})
可选:特定于定时任务的后缀(例如,将 out/err 重定向到文件,默认值为'')
示例:
对于熟悉 Linux 中定时任务crontab 的同学可能对上面第一个参数的语法很亲切。上面表示每隔1分钟执行一次代码。
Linux 中的定时任务crontab的语法如下:
有几个特殊的符号:
示例:
有兴趣的小伙伴可以深入研究下 Linux 的crontab定时任务。如果不了解和不熟悉可以想看: cron语法格式学习
5.添加并启动定时任务
其它命令:
一些问题
如果配置成这样:
上述代码的目的是,希望对任务的输出和错误日志,进行 log_ddmmYY 格式进行文件每天分开保存。
但是这个任务,在第二天时,就不会在执行啦!!
因为,CRONJOBS 生成任务时,会生成对应的哈希值(hashes),标识每个任务。所以,当文件名变更时,CRONJOBS 中的值每天都在变化,导致不同的定时任务哈希值(hashes)。
针对这种情况,解决方法是,日志文件名称固定,然后创建一个任务,用来每天把日志文件重命名(move)成想要的格式名称,这样就可以啦!
总结
通过这个需求,可以看到很多知识点其实是串联起来的,从python到django到Linux的crontab,所以,学习无止境,知识学习只会越来越多,如果你提前掌握了某些知识,那么学习新(旧)知识的成本就会降低很多,或者理解成本,比如你学习了 Linux, 了解过 cron ,那么对于学习这个 django 的定时任务会轻松很多!永远不要认为有些知识你永远用不上,所以现在就不学,可能现在的永远距离已经很短啦!加油~
在您开始之前,在你的计算机将需要Python,但您可能不需要下载它。首先检查(在同级目录下在命令行窗口输入python)有没有安装Python。如果你看到了一个Python解释器的响应,那么就能在它的显示窗口中得到一个版本号。通常的版本都可以做到Python的向前兼容。