Python下實(shí)現(xiàn)定時(shí)任務(wù)的方式有很多種方式。下面介紹幾種
循環(huán)sleep:
這是一種最簡(jiǎn)單的方式,在循環(huán)里放入要執(zhí)行的任務(wù),然后sleep一段時(shí)間再執(zhí)行。缺點(diǎn)是,不容易控制,而且sleep是個(gè)阻塞函數(shù)。
def timer(n): ''''' 每n秒執(zhí)行一次 ''' while True: print time.strftime('%Y-%m-%d %X',time.localtime()) yourTask() # 此處為要執(zhí)行的任務(wù) time.sleep(n) threading的Timer:
threading模塊中的Timer能夠幫助實(shí)現(xiàn)定時(shí)任務(wù),而且是非阻塞的。
比如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是一種調(diào)度(延時(shí)處理機(jī)制)。
# -*- coding:utf-8 -*- # use sched to timing import time import os import sched # 初始化sched模塊的scheduler類(lèi) # 第一個(gè)參數(shù)是一個(gè)可以返回時(shí)間戳的函數(shù),第二個(gè)參數(shù)可以在定時(shí)未到達(dá)之前阻塞。 schedule = sched.scheduler(time.time, time.sleep) # 被周期性調(diào)度觸發(fā)的函數(shù) def execute_command(cmd, inc): ''''' 終端上顯示當(dāng)前計(jì)算機(jī)的連接情況 ''' os.system(cmd) schedule.enter(inc, 0, execute_command, (cmd, inc)) def main(cmd, inc=60): # enter四個(gè)參數(shù)分別為:間隔事件、優(yōu)先級(jí)(用于同時(shí)間到達(dá)的兩個(gè)事件同時(shí)執(zhí)行時(shí)定序)、被調(diào)用觸發(fā)的函數(shù), # 給該觸發(fā)函數(shù)的參數(shù)(tuple形式) schedule.enter(0, 0, execute_command, (cmd, inc)) schedule.run() # 每60秒查看下網(wǎng)絡(luò)連接情況 if __name__ == '__main__': main("netstat -an", 60) 使用定時(shí)框架APScheduler:
APScheduler是基于Quartz的一個(gè)Python定時(shí)任務(wù)框架。提供了基于日期、固定時(shí)間間隔以及crontab類(lèi)型的任務(wù),并且可以持久化任務(wù)。
這個(gè)現(xiàn)在還沒(méi)自己嘗試過(guò),等過(guò)段時(shí)間用了再來(lái)補(bǔ)充。
使用windows的定時(shí)任務(wù):
這里可以將所需要的Python程序打包成exe文件,然后在windows下設(shè)置定時(shí)執(zhí)行。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選