python定時任務調度
A. python實現定時任務
缺點:不容易控制,而且是個阻塞函數
優點:可以管理和調度多個任務,可以進行控制
缺點:阻塞式函數
優點:非阻塞
缺點:不易管理多個任務
sched模塊實現了一個時間調度程序,該程序可以通過單線程執行來處理按照時間尺度進行調度的時間。
通過調用 scheler.enter(delay,priority,func,args) 函數,可以將一個任務添加到任務隊列裡面,當指定的時間到了,就會執行任務( func函數 )。
執行結果為:
按順序執行任務:
執行結果為:
s.run()會阻塞當前線程的執行
可以用
也可以用 s.cancal(action) 來取消sched中的某個action
運行結果為:
運行結果為:
運行結果:
celery框架後續更新
B. python讀取windows定時任務
1、准備好Python腳本py文件,放置在一個文件夾下。
2、創建一個txt文件,並把文件類型(後綴)改為bat、編寫文件內容。
3、Win鍵+R,輸入compmgmt,msc,調出計算機管理窗口。點擊左側任務計劃程序,再點擊右側創建基本任務。
4、填寫任務的基本信息,選擇腳本執行的觸發器。
5、選擇具體時間,選擇執行的操作、選擇要執行的腳本,創建完成。
C. python3定時器
在實際應用中,我們經常需要使用定時器去觸發一些事件。Python中通過線程實現定時器timer,其使用非常簡單。看示例:
一秒後輸出 Hello Timer!
oneshot的定時器這樣就可以實現。
如果要實現cycle的定時器,則可以:
1s後定時器啟動後,將再次以5.5s為間隔周期性執行回調fun_timer函數
結果是:
在使用Python定時器時需要注意:
1.定時器構造函數主要有2個參數,第一個參數為時間,第二個參數為函數名,第一個參數表示多長時間後調用後面第二個參數指明的函數。第二個參數注意是函數對象,進行參數傳遞,用函數名(如fun_timer)表示該對談冊象,不能寫成函數執行語句fun_timer(),不然含核宏會報錯。
2.定時器間隔單位是秒,可以是浮點數,如5.5,0.02等,在執行函數fun_timer內部和外部中給的值氏族可以不同。如上例中第一次執行fun_timer是1秒後,後面的都是5.5秒後執行。
3.可以使用cancel停止定時器的工作
D. 定時任務
實現定時任務的方法有很多,接下來我們針對各種方法對比下優缺點。
sched模塊實現了一個時間調度程序,該程序可以通過單線程執行來處理按照時間尺度進行調度的時間。
通過調用scheler.enter(delay,priority,func,args)函數,可以將一個任務添加到任務隊列裡面,當指定的時間到了,就會執行任務(func函數)。
執行結果為:
按順序執行任務:
執行結果為:
s.run()會阻塞當前線程的執行
可以用
也可以用s.cancal(action)來取消sched中的某個action
APScheler有四種組件:
示例2、
示例3、
示例4、
運行結果為:
示例5、
運行結果:
示例6、
示例7、
缺點: 遇到問題排查時比較困難。
精講見celery
優點: 基於Redis的作業隊列工具,優先選擇APScheler定時框架。小而精。
缺點: 沒有定時執行的功能。
後續精講持續更新中。。。
可以將所需要的Python程序打包成exe文件,然後在windows下設置定時執行。
常見:
Windows 任務計劃程序
Windows Service
SQL Agent 的 Job
優點: 可以管理和調度多個任務,可以進行控制。
缺點: 阻塞式函數
優點: 不需要程序自己維護定時器,不佔用程序的資源。
缺點: 不太靈活,crontab因為是操作系統的命令,獨立於程序運行,所以也就是在程序還沒有運行的時候,就已經確定了有哪些定時任務需要執行,並東提前交代給了linux系統,如果程序運行當中,發現有新的定時任務需求,想要讓程序自動交代給crontab一個新的定時任務,並不是很方便。
語法
或
說明
參數說明
E. python如何實現程序定時執行的功能
sleep就可以吧,頃閉槐把程態飢序作為一個線雀友程,啟動線程,裡面加個sleep,示例如下:x0dx0aimport threadingx0dx0aimport timex0dx0aclass Test(threading.Thread):x0dx0a def __init__(self):x0dx0a passx0dx0a x0dx0a def test(self):x0dx0a print 'run test!'x0dx0a x0dx0a def run(self):x0dx0a while True:x0dx0a print time.strftime('%Y-%m-%d %H:%M:%S')x0dx0a self.test()x0dx0a time.sleep(5)x0dx0a#test...x0dx0aa=Test()x0dx0aa.run()x0dx0a#...test
F. python定時每個工作日
1).window下是dir命令,linux是ls
我們用platform這個模塊來判斷一下操作系統,a.我們先獲取當租改前的時間,假設當前時間是2017-02-09 20:19:47.555000
b.然後我們輸入一個你弊攔判要定時執行的target時間,比如你是x分10秒的時候執行sched_Timer=datetime.datetime(x,x,x,x,x,10),前面的x是並不重要(只要最後是10秒就行了),我們就把目標時間設的比當前晚一點即可:c.好當時間到了20:20:10的時候要運行我們的程序,如何定時到了呢,很簡單用,d.那麼如何讓時間在下一分鍾10秒繼續執行呢,也很簡單用timedelta()
datetime.timedelta(minutes=1)把target時間往後增加一分鍾,然後外邊用個while 死循環hold住就可以了。同樣的這個代碼也可以擴展,把minutes=1改成hours=1就變成了每個小時定時任務,改成days=1就變成每天的定時任務。衡睜
G. python查看timer定時任務已開啟
python查看timer定時任務已開啟 的操作方法:Timer定時任務
下面仔賀冊是Timer函數的官方doc介紹信息
"""
Call a function after a specified number of seconds:
t = Timer(30.0, f, args=None, kwargs=None)
t.start()
t.cancel() # stop the timer's action if it's still waiting
"""
第一個參念宏數時指定多長時間之後執行這個函數,第二個參數時調用的函數名,
後面兩個是可選函數,作為傳遞函數需要使用的參數,可以傳遞普拍陵通的參數和字典
t.start() 啟動這個定時任務,也可以使用t.cancel()在一定的條件來停止這個定時任務,
下面這行代碼表示十秒鍾後調用一次views_count這個函數
Timer(10, views_count).start()
H. 簡單強大的Python庫!Schele—實用的周期任務調度工具
如果你想在Linux伺服器上周期性地執行某個 Python 腳本,最出名的選擇應該是 Crontab 腳本,但是 Crontab 具有以下缺點:
1.不方便執行 秒級的任務 。
2.當需要執行的定時任務有上百個的時候,Crontab的 管理就會特別不方便 。
另外一個選擇是 Celery,但是 Celery 的配置比較麻煩,如果你只是需要一個輕量級的調度工具,Celery 不會是一個好選擇。
在你想要使用一個輕量級的任務調度工具,而且希望它盡量簡單、容易使用、不需要外部依賴,最好能夠容納 Crontab 的所有基本功能,那麼 Schele 模塊是你的不二之選。
使用它來調度任務可能只需要幾行代碼,感受一下:
上面的代碼表示每10分鍾執行一次 job 函數,非常簡單方便。你只需要引入 schele 模塊,通過調用 scele.every(時間數).時間類型.do(job) 發布周期任務。
發布後的周期任務需要用 run_pending 函數來檢測是否執行,因此需要一個 While 循環不斷地輪詢這個函數。
下面具體講講Schele模塊的安裝和初級、進階使用方法。
1.准備
請選擇以下任一種方式輸入命令安裝依賴 :
1. Windows 環境 打開 Cmd (開始-運行-CMD)。
2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
2.基本使用
最基本的使用在文首已經提到過,下面給大家展示更多的調度任務例子:
可以看到,從月到秒的配置,上面的例子都覆蓋到了。不過 如果你想只運行一次任務 的話,可以這么配:
參數傳遞
如果你有參數需要傳遞給作業去執行,你只需要這么做:
獲取目前所有的作業
如果你想獲取目前所有的作業:
取消所有作業
如果某些機制觸發了,你需要立即清除當前程序的所有作業:
標簽功能
在設置作業的時候,為了後續方便管理作業,你可以給作業打個標簽,這樣你可以通過標簽過濾獲取作業或取消作業。
設定作業截止時間
如果你需要讓某個作業到某個時間截止,你可以通過這個方法:
截止日期之後,該作業將無法運行。
立即運行所有作業,而不管其安排如何
如果某個機制觸發了,你需要立即運行所有作業,可以調用 schele.run_all :
3.高級使用
裝飾器安排作業
如果你覺得設定作業這種形式太啰嗦了,也可以使用裝飾器模式:
並行執行
默認情況下,Schele 按順序執行所有作業。其背後的原因是,很難找到讓每個人都高興的並行執行模型。
不過你可以通過多線程的形式來運行每個作業以解決此限制:
日誌記錄
Schele 模塊同時也支持 logging 日誌記錄,這么使用:
效果如下:
異常處理
Schele 不會自動捕捉異常,它遇到異常會直接拋出,這會導致一個嚴重的問題: 後續所有的作業都會被中斷執行 ,因此我們需要捕捉到這些異常。
你可以手動捕捉,但是某些你預料不到的情況需要程序進行自動捕獲,加一個裝飾器就能做到了:
這樣, bad_task 在執行時遇到的任何錯誤,都會被 catch_exceptions 捕獲,這點在保證調度任務正常運轉的時候非常關鍵。
I. python1小時內不重復發送
python1小時內不重復發送的原因。
1、python中有一個輕量級的定時任務調度的庫:schele。
2、它可以完成每分鍾,每小時,每天,周幾,特定含宴日期的定時任務,不會重復發送內洞老喚容,十分方便我們執納凱行一些輕量級的定時任務。
J. python動態添加刪除定時任務
可以基於tornado-APScheler實現添加動態添加/刪除/暫停/清除定時任務。
安裝:pip3 install apsheler
1.任何調度器在開始後,不能再次start。不然會出現異常
2.shutdown方法:終結掉對應的調度器,所以代碼邏輯里需要檢測一下. running方法可以判斷調度器的運行狀態,如果需要設計delete方法清除某個任務,建議用remove方法,對應代碼邏輯需要注意start()不要重復
3.注意BlockingScheler,如果你想動態添加任務的話,這個調度器是阻塞的,所以每個任務必須是一個守護線程,個人感覺不太方便,建議用其他非阻塞的
4. get_jobs()方法很有用,如果我們加上dir,配合這個方法可以很靈活地配置
5.修改一個周期任務,需要用modify_job方法,根據你的job_id修改
Python由荷蘭數學和計算機科學研究學會的Guido van Rossum 於1990 年代初設計,作為一門叫做ABC語言的替代品。 Python提供了高效的高級數據結構,還能簡單有效地面向對象編程。Python語法和動態類型,以及解釋型語言的本質,使它成為多數平台上寫腳本和快速開發應用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用於獨立的、大型項目的開發。