一、循环sleep
在循环里放入要执行的任务,然后sleep一段时间再执行。缺点是,不容易控制,而且sleep是个阻塞函数
import time
def timer(n):
while True:
print(time.strftime('%Y-%m-%d %X',time.localtime()))
yourTask() # 此处为要执行的任务
time.sleep(n) # 每隔n秒执行一次
二、Timer类
这个类表示一个动作应该在一个特定的时间之后运行 — 也就是一个计时器。Timer是Thread的子类, 因此也可以使用函数创建自定义线程。
class threading.Timer(interval, function, args=[], kwargs={})
创建一个timer,在interval秒过去之后,它将以参数args和关键字参数kwargs运行function 。
5秒后执行函数
from threading import Timer
def printHello():
print("Hello world")
if __name__=='__main__':
t = Timer(5.0, printHello)
t.start() # 5秒后执行printHello
间隔5秒执行一次
from threading import Timer
def printHello():
print("Hello world")
t = Timer(5.0,printHello)
t.start()
if __name__ == "__main__":
printHello()
两种方式组合用,5秒钟后执行,并且之后间隔5秒执行一次
from threading import Timer
def printHello():
print("Hello world")
_t = Timer(5.0,printHello)
_t.start()
if __name__ == "__main__":
print('程序将在5秒后运行...')
t = Timer(5.0,printHello)
t.start()
三、sched模块
import time
import os
import sched
# 初始化sched模块的scheduler类
# 第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
schedule = sched.scheduler(time.time, time.sleep)
# 被周期性调度触发的函数
def execute_command(cmd, inc):
os.system(cmd)
schedule.enter(inc, 0, execute_command, (cmd, inc))
def main(cmd, inc=10):
# enter四个参数分别为:间隔时间、优先级(用于同时间到达的两个事件同时执行时定序)、被调用触发的函数、给该触发函数的参数(tuple形式)
schedule.enter(0, 0, execute_command, (cmd, inc))
schedule.run()
# 每10秒ping一下百度
if __name__ == '__main__':
main("ping www.baidu.com", 10)
四、使用windows的定时任务
在windows系统中设置定时任务。
五、Linux的定时任务(Crontab)
在Linux下可以很方便的借助Crontab来设置和运行定时任务。进入Crontab文件编辑页面,设置时间间隔,使用一些shell命令来运行bash脚本或者是Python脚本,保存后Linux会自动按照设定的时间来定时运行程序。