定时后台运行Python程序
2018-09-24 本文已影响6人
DigiHacker
大型程序中经常会需要定时运行某些任务,比如生成报表,发邮件等。复杂的方法会用到消息队列,用API调用一个接口定时运行你的任务。简单的用Cron或者Windows里的计划任务。而Python提供了一个更简单的方法。
Cron需要的是给出一行指定时间范围。Python只需要pip install schedule, 我们就可以象写伪代码一样交待它运行就可以了。下面是一个例子

在main方法里我们要定时运行home和news, 在import schedule, 每个方法调用下就可以了,注意方法名就可以,不要加括号

但我们总不能等三分钟或者一小时看任务执行情况吧,这里就需要用日志记录下,方便我们调试。我们就用Python自带的logging就够用了

用basicConfig方法做一些初始化的工作就好,比如log文件名和loglevel. 因为我们主要是记载方法的运行情况,所以用information(INFO) 级别就比较适合
schedule会自带记录到log里,包括了方法名和运行时间,所以我们也不用特意去写log方法

这样我们就可以运行一次就好,因为是个死循环,除非我们ctrl+c去中断任务,它会一直运行到天荒地老。但是这还是个前台任务,我们可以用一些方法让它作为windows service或者Linux daemon在后台和开机直接运行。