Python下實現定時任務的方式有很多種方式。下面介紹幾種
循環sleep:
這是一種最簡單的方式,在循環里放入要執行的任務,然后sleep一段時間再執行。缺點是,不容易控制,而且sleep是個阻塞函數。
def timer(n): ''''' 每n秒執行一次 ''' while True: print time.strftime('%Y-%m-%d %X',time.localtime()) yourTask() # 此處為要執行的任務 time.sleep(n)
threading的Timer:
threading模塊中的Timer能夠幫助實現定時任務,而且是非阻塞的。
比如3秒后打印helloworld:
def printHello(): print "hello world" Timer(3, printHello).start()
比如每3秒打印一次helloworld:
def printHello(): print "Hello World" t = Timer(2, printHello) t.start() if __name__ == "__main__": printHello()
使用sched模塊:
sched是一種調度(延時處理機制)。
# -*- coding:utf-8 -*- # use sched to timing 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=60): # enter四個參數分別為:間隔事件、優先級(用于同時間到達的兩個事件同時執行時定序)、被調用觸發的函數, # 給該觸發函數的參數(tuple形式) schedule.enter(0, 0, execute_command, (cmd, inc)) schedule.run() # 每60秒查看下網絡連接情況 if __name__ == '__main__': main("netstat -an", 60)
使用定時框架APScheduler:
APScheduler是基于Quartz的一個Python定時任務框架。提供了基于日期、固定時間間隔以及crontab類型的任務,并且可以持久化任務。
這個現在還沒自己嘗試過,等過段時間用了再來補充。
使用windows的定時任務:
這里可以將所需要的Python程序打包成exe文件,然后在windows下設置定時執行。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。
新聞熱點
疑難解答