在我们用python编写完脚本后,时常需要定时运行我们的脚本。在这里,我为大家介绍两种常用定时执行python脚本文件的方式:
第一种: crontab job
在Linux系统中可以通过设置crontab 的方式设置脚本自动执行的时间。这个任务调度命令是Linux系统默认安装的。crond 命令会自己动定期检查是否需要执行任务。
注意: 在初次新建crontab job 后,任务不会马上开始执行,一般需要等到2 min 后开始执行。
基本语法:crontab [-u user] file 或 crontab -e
编写crontab 文件。
其中,-u 是指设定指定的user来执行脚本,这主要是涉及到某个用户才有执行或修改权限等。
-e : 进入crontab 文件编辑状态。
-r : 删除目前的时程表。
-l : 查看用户的时程表。
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
第二种:调用schedule 模块定时执行任务。众所周知,python 因其丰富的库函数而闻名,这里我们将简单介绍一个轻量级的定时任务执行包。它能够有效满足我们大多数时候的需求。
import schedule
import time
def job(name):
print("her name is : ", name)
name = "longsongpong"
schedule.every(10).minutes.do(job, name) # 每隔十分钟执行一次任务
schedule.every().hour.do(job, name) # 每隔一小时执行一次任务
schedule.every().day.at("10:30").do(job, name)# 每天的10:30执行一次任务
schedule.every(5).to(10).days.do(job, name)# 每隔5到10天执行一次任务
schedule.every().monday.do(job, name)# 每周一的这个时候执行一次任务
schedule.every().wednesday.at("13:15").do(job, name)# 每周三的13:15执行一次任务
while True:
schedule.run_pending() # 运行所有可以运行的任务
time.sleep(1)
schedule的所有任务都是串行执行的,如果需要多线程并发,可以如下方式启用多线程:
def run_threaded(job_func):
job_thread = threading.Thread(target=job_func)
job_thread.start()
schedule.every(10).seconds.do(run_threaded,job)
schedule.every(10).seconds.do(run_threaded,job2)