国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

利用Python實現(xiàn)定時程序的方法

瀏覽:3日期:2022-06-15 13:17:33
目錄定時器概念實現(xiàn)一個簡單的定時程序方案一方案二定時器概念

什么是定時器呢?它是指從指定的時刻開始,經(jīng)過一個指定時間,然后觸發(fā)一個事件,用戶可以自定義定時器的周期與頻率。

實現(xiàn)一個簡單的定時程序方案一

在 Python 中,如何定義一個定時器函數(shù)呢?我們先看第一種方法。假設(shè)我們需要執(zhí)行一個函數(shù)userCountFunc,這個函數(shù)需要每隔一個小時被執(zhí)行一次。那么,我們可以這樣寫:

def main(): startCronTask(userCountFunc, minutes=60)if __name__ == ’__main__’: main()

如上面的代碼,我們在定義了一個 main 函數(shù)后,便定義了一個定時函數(shù) startCronTask。第一個參數(shù)為函數(shù)名,第二個參數(shù)為時間,第二個參數(shù)表示多長時間后調(diào)用后面第一個參數(shù)的函數(shù)。第一個參數(shù)注意是函數(shù)對象,進行參數(shù)傳遞,用函數(shù)名(如 userCountFunc)表示該對象,不是函數(shù)執(zhí)行語句 userCountFunc(),不然會報錯。那么,在實現(xiàn)這個函數(shù)時,需要引入定時功能,Python 中有一個定時任務(wù)模塊 BlockingScheduler:

from apscheduler.schedulers.blocking import BlockingSchedulerdef startCronTask(task, **config): # BlockingScheduler scheduler = BlockingScheduler() scheduler.add_job(task, ’interval’, **config) scheduler.start()

定義完一個調(diào)度模塊之后,實際的定時調(diào)度功能就完成了。接下來,需要具體實現(xiàn)定時執(zhí)行的邏輯函數(shù) userCountFunc:

def userCountFunc(): logger.info(’count user’) ...

這樣,對于方案一,實現(xiàn)的簡單的定時功能就完成了。

方案二

方案一中介紹的是 Python 自帶的 BlockingScheduler 模塊,Python 中除了可以通過 BlockingScheduler,還通過線程實現(xiàn)定時器 timer,來簡單的看下代碼:

import threadingdef timerFunc(): print(’Hello World~’)timer = threading.Timer(1, timerFunc)timer.start()

在上面的代碼中,定時器函數(shù) threading.Timer 主要有2個參數(shù),參數(shù)意義與方案一類似,接下來執(zhí)行這段程序:

Hello World~ Process finished with exit code 0

我們發(fā)現(xiàn)只執(zhí)行一遍,程序就結(jié)束了,但顯然不是我們想要的結(jié)果。其實,我們看下 Time 類,有這樣的一句解釋性注釋:Call a function after a specified number of seconds,我們發(fā)現(xiàn)上面在執(zhí)行后并未循環(huán)執(zhí)行,所以需要修改下:

import threadingdef timerFunc(): print(’Hello World~’) global timer timer = threading.Timer(10.5, timerFunc) timer.start()timer = threading.Timer(3, timerFunc)timer.start()

此時,我們可以看到輸出結(jié)果:

Hello World~

Hello World~

Hello World~...

這里需要注意的是:必須在定時器執(zhí)行函數(shù)內(nèi)部重復(fù)構(gòu)造定時器,因為定時器構(gòu)造后只執(zhí)行1次,必須循環(huán)調(diào)用。

另外,在上面的代碼中,我們其實還可以看到:threading.Timer(5.5, timerFunc),定時器間隔單位是秒,可以是浮點數(shù),如5.5,0.9等,在執(zhí)行函數(shù) timerFunc 內(nèi)部和外部中給的值可以不同。如上例中第一次執(zhí)行 timerFunc 是3秒后,后面的都是10.5秒后執(zhí)行。

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

import threadingdef 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()

上面的代碼表示:在定時器按照一定時間執(zhí)行后,執(zhí)行過程耗時60秒后停止定時操作功能,退出。顯示結(jié)果為:

Hello World~

Hello World~

Hello World~

Hello World~

Hello World~...

Process finished with exit code 0

到此這篇關(guān)于利用Python實現(xiàn)定時程序的方法的文章就介紹到這了,更多相關(guān)Python 定時程序內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 黔西县| 井研县| 临猗县| 措美县| 枞阳县| 正镶白旗| 襄垣县| 湛江市| 连山| 永定县| 白山市| 兰州市| 咸宁市| 穆棱市| 康平县| 灵武市| 万盛区| 洞头县| 迁安市| 江北区| 辽宁省| 兴安盟| 顺昌县| 仁布县| 揭阳市| 沙田区| 晋江市| 盈江县| 贡觉县| 武安市| 柯坪县| 中超| 班玛县| 海兴县| 从化市| 桃江县| 双江| 大方县| 万全县| 甘孜县| 页游|