利用Python實現定時程式的方法

2022-09-25 09:15:09 字數 2590 閱讀 7571

目錄

什麼是定時器呢?它是指從指定的時刻開始,經過乙個指定時間,然後觸發乙個事件,使用者可以自定義定時器的週期與頻率。

在 python 中,如何定義乙個定時器函式呢?我們先看第一種方法。假設我們需要執行乙個函式usercountfunc,這個函式需要每隔乙個小時被執行一次。那麼,我們可以這樣寫:

def main():

startcrontask(usercountfunc, minutes=60)

if __name__ == '__main__':

main()

如上面的**,我們在定義了乙個 main 函式後,便定義了乙個定時函式 startcrontask。第乙個引數為函式名,第二個引數為時間,第二個引數表示多長時間後呼叫後面第乙個引數的函式。第乙個引數注意是函式物件,進行引數傳遞,用函式名(如 usercountfunc)表示該物件,不是函式執行語句 usercountfunc(),不然會報錯。那麼,在實現這個函式時,需要引入定時功能,python 中有乙個定時任務模組 blockingscheduler:

from apscheduler.schedulers.blocking import blockingscheduler

def startcrontask(task, **config):

# blockingscheduler

scheduler = blockingscheduler()

scheduler.add_job(task, 'interval', **config)

scheduler.start()

定義完乙個排程模組之後,實際的定時排程功能就完成了。接下來,需要具體實現定時執行的邏輯函式 usercountfunc:

def usercountfunc():

logger.info('count uzzkvfilsdser')

...這樣,對於方案一,實現的簡單的定時功能就完成了。

方案一中介紹的是 python 自帶的 blockingscheduler 模組,python 中除了可以通過 blockingscheduler,還通過執行緒實現定時器 timer,來簡單的看下**:

import threading

def timerfunc():

print('hello world~')

timer = threading.timer(1, timerfunc)

timer.start()

在上面的**中,定時器函式 threading.timer 主要有2個引數,引數意義與方案一類似,接下來執行這段程式:

hello world~

process finished with exit code 0

我們發現只執行一遍,程式就結束了,但顯www.cppcns.com然不是我們想要的結果。其實,我們看下 time 類,有這樣的一句解釋性注釋:call a function after a specified number of seconds,我們發現上面在執行後www.cppcns.com並未迴圈執行,所以需要修改下:

import threading

def timerfunc():

print('hello world~')

global timer

timer = threading.timer(10.5, timerfunc)

timer.start()

timer = threading.timer(3, timerfunc)

timer.start()

此時,我們可以看到輸出結果:

hello world~

hello world~

hello world~

...這裡需要注意的是:必須在定時器執行函式內部重複構造定時器,因為定時器構造後只執行1次,必須迴圈呼叫。

另外,在上面的**中,我們其實還可以看到:threading.timer(5.5, timerfunc),定時器間隔單位是秒,可以是浮點數,如5.5,0.9等,在執行函式 timerfunc 內部和外部中給的值可以不同。如上例中第一次執行 timerfunc 是3秒後,後面的都是10.5秒後執行。

接下來,我們再看看如何再一www.cppcns.com定時間結束定時功能。我們可以使用cancel停止定時器的工作,如下例:

import threading

def timerfunc():

print('hello world~')

global timer

timer = threading.timer(10.5, timerfunc)

timer.start()

timer = threading.timer(3, timerfunc)

timer.start()

time.sleep(60)

timer.cancel()

上面的**表示:在定時器按照一定時間執行後,執行過程耗時60秒後停止定時操作功能,退出。顯示結果為:

hello world~

hello world~

hello world~

hello world~

hello world~

...process finished with exit code 0

程式設計客棧

Python 程式實現電腦自動定時關機

python 程式實現電腦自動定時關機前言 因為有時候想讓電腦在幾個小時後關機,然而用cmd命令又有些麻煩,所以自己設計了乙個簡單的視覺化操作介面,令電腦可以選擇在幾小時後關機 如下 coding gbk import tkinter as t import os var 1 讀取輸入資料,預設為1...

centos下利用crontab實現定時任務

cron服務是linux自帶的定時任務。方便快捷好用是他的優點。只要了解他的時間設定,即cron表示式,能輕鬆的掌握 檢視當前crontab定時列表 crontab l編輯crontab crontab e刪除crotab crontab r crontab e 編輯將對應的定時任務刪除即可cron...

利用Python程式實現櫻花樹的繪製

根據turtle畫筆功能,預先設定好畫筆的軌跡等多項性質,引入時間函式,實現動態繪製櫻花樹。主要 如下 import turtle as t import random import time def tree bran,t time.sleep 0.001 if bran 3 if 8 bran ...