Python定時任務輕量解決方案---Schedule

凝望遠處的天鵝發表於2020-08-17

寫後端的同學們可能都知道,工作中可能需要週期性執行一些任務,俗稱定時任務。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)

 

就是這麼簡單,你學會了嗎?

相關文章