python定時任務的實現(在特定時間段內,間隔一定時間執行一次任務)


有時候,我們想讓程序在某個特定時間段內去多次執行某個任務,比如每天凌晨3點-4點,隔10秒執行一次任務,接下來,我們就用python自帶的datetime模塊和threading模塊去實現它,代碼如下:

import datetime
import threading

#任務描述:每天凌晨3-4點,隔10秒執行一次task任務
def func1():
    '''凌晨3點開啟任務'''
    func2()
    #如果需要每天都執行,加上下面兩句
    t = threading.Timer(86400,func1)
    t.start()

def func2():
    '''3點-4點,隔10秒執行一次任務task'''
    task()
    # 凌晨4點函數結束執行
    now_time = datetime.datetime.now()
    today_4 = datetime.datetime.strptime(str(datetime.datetime.now().year)+'-'+str(datetime.datetime.now().month)+'-'+str(datetime.datetime.now().day)+' '+'04:00:00','%Y-%m-%d %H:%M:%S')
    #因為定時任務會延后10秒鍾執行,所以設置終止條件時,需要提前10秒鍾
    if  now_time <= today_4-datetime.timedelta(seconds=10):
        t = threading.Timer(10, func2)
        t.start()

def task():
    '''需要執行的任務'''
    print('task任務開始執行')
    print('task任務執行完畢')

def main():
    #獲取當前時間
    now_time = datetime.datetime.now()

    #獲取當前時間年、月、日
    now_year = now_time.year
    now_month = now_time.month
    now_day = now_time.day

    #今天凌晨3點時間表示
    today_3 = datetime.datetime.strptime(str(now_year)+'-'+str(now_month)+'-'+str(now_day)+' '+'03:00:00','%Y-%m-%d %H:%M:%S')
    #明天凌晨3點時間表示
    tomorrow_3 = datetime.datetime.strptime(str(now_year)+'-'+str(now_month)+'-'+str(now_day)+' '+'03:00:00','%Y-%m-%d %H:%M:%S')

    #判斷當前時間是否過了今天凌晨3點,如果沒過,則今天凌晨3點開始執行,過了則從明天凌晨3點開始執行,計算程序等待執行的時間
    if now_time <= today_3:
        wait_time = (today_3 - now_time).total_seconds()
    else:
        wait_time = (tomorrow_3 - now_time).total_seconds()

    #等待wait_time秒后(今天凌晨3點或明天凌晨3點),開啟線程去執行func函數
    t = threading.Timer(wait_time,func1)
    t.start()

if __name__ == '__main__':
    main()    

如果想讓程序更通用,可以將上述方法封裝成一個定時器類,進行參數化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM