本文介紹了python BlockingScheduler定時任務及其他方式的實現,具體如下:
#BlockingScheduler定時任務 from apscheduler.schedulers.blocking import BlockingScheduler from datetime import datetime 首先看看周一到周五定時執行任務 # 輸出時間 def job(): print(datetime.now().strtime("%Y-%m-%d %H:%M:%S")) # BlockingScheduler scheduler = BlockingScheduler() scheduler.add_job(job, "cron", day_of_week="1-5", hour=6, minute=30) schduler.start() scheduler.add_job(job, 'cron', hour=1, minute=5) hour =19 , minute =23 這里表示每天的19:23 分執行任務 hour ='19', minute ='23' 這里可以填寫數字,也可以填寫字符串 hour ='19-21', minute= '23' 表示 19:23、 20:23、 21:23 各執行一次任務 #每300秒執行一次 scheduler .add_job(job, 'interval', seconds=300) #在1月,3月,5月,7-9月,每天的下午2點,每一分鐘執行一次任務 scheduler .add_job(func=job, trigger='cron', month='1,3,5,7-9', day='*', hour='14', minute='*') # 當前任務會在 6、7、8、11、12 月的第三個周五的 0、1、2、3 點執行 scheduler .add_job(job, 'cron', month='6-8,11-12', day='3rd fri', hour='0-3') #從開始時間到結束時間,每隔倆小時運行一次 scheduler .add_job(job, 'interval', hours=2, start_date='2018-01-10 09:30:00', end_date='2018-06-15 11:00:00') #自制定時器 from datetime import datetime import time # 每n秒執行一次 def timer(n): while True: print(datetime.now().strftime("%Y-%m-%d %H:%M:%S")) time.sleep(n) timer(5)
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下設置定時執行。
使用Linux的定時任務(Crontab):
在Linux下可以很方便的借助Crontab來設置和運行定時任務。進入Crontab文件編輯頁面,設置時間間隔,使用一些shell命令來運行bash腳本或者是Python腳本,保存后Linux會自動按照設定的時間來定時運行程序。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
