寫後端的同學們可能都知道,工作中可能需要週期性執行一些任務,俗稱定時任務。Linux環境下,可以藉助於系統自帶的crontab完成定時任務。但是很多時候,開發的同學們可能並沒有許可權去操作crontab,所以就催生了一些不太好的解決方案,比如基於Python/Java裡面的Timer去弄一個週期性執行的工具。
大佬們,醒醒,主角出場了。今天給大家分享一個Python輕量級定時任務解決方案,schedule,可以滿足常用的週期性任務需求。
安裝
pip install schedule
使用
schedule提供了多種方法去描述執行週期,比如:
#1,按照某個時間間隔
every(10).seconds.do(task),表示每隔10秒執行task任務。當然可以把間隔換成其他單位,比如minutes,hours,days
#2,按照一個固定的時間點
every().day.at('9:30').do(task),表示每天9:30執行任務
#encoding=utf-8 from datetime import datetime import time import schedule def job1(*args): with open('tasks', 'a') as f: f.write('[{}]{}\n'.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f'), 'msg')) # 每隔5秒執行一次job1 schedule.every(5).seconds.do(job1) # 每天9:30執行任務 schedule.every().day.at('09:30').do(job1) if __name__ == '__main__': while True: schedule.run_pending() time.sleep(1)
效果
如何讓任務只執行一次?
只需要在任務最後加上這句話就行,return schedule.CancelJob
#encoding=utf-8 from datetime import datetime import time import scheduledef job_run_once(*args): print('Job run only once') # return schedule.CancelJob # 只執行一次任務 schedule.every(3).seconds.do(job_run_once) if __name__ == '__main__': while True: schedule.run_pending() time.sleep(1)
就是這麼簡單,你學會了嗎?