欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年07月06日 08:36:18   作者:Lavender1  
在 Python 中,如何定義一個(gè)定時(shí)器函數(shù)呢?本文主要介紹了2種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

定時(shí)器概念

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

實(shí)現(xiàn)一個(gè)簡單的定時(shí)程序

方案一

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

def main():
    startCronTask(userCountFunc, minutes=60)

if __name__ == '__main__':
    main()

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

from apscheduler.schedulers.blocking import BlockingScheduler

def startCronTask(task, **config):
    # BlockingScheduler
    scheduler = BlockingScheduler()
    scheduler.add_job(task, 'interval', **config)
    scheduler.start()

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

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

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

方案二

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

import threading

def timerFunc():
    print('Hello World~')

timer = threading.Timer(1, timerFunc)
timer.start()

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

Hello World~
      
Process finished with exit code 0

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

import threading

def timerFunc():
    print('Hello World~')
    global timer
    timer = threading.Timer(10.5, timerFunc)
    timer.start()

timer = threading.Timer(3, timerFunc)
timer.start()

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

Hello World~

Hello World~

Hello World~
...

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

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

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

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

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

Hello World~

Hello World~

Hello World~

Hello World~

Hello World~
...

Process finished with exit code 0

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

相關(guān)文章

  • python3爬蟲之設(shè)計(jì)簽名小程序

    python3爬蟲之設(shè)計(jì)簽名小程序

    這篇文章主要為大家詳細(xì)介紹了python3爬蟲之寫為朋友設(shè)計(jì)簽名的小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • 對于Python裝飾器使用的一些建議

    對于Python裝飾器使用的一些建議

    這篇文章主要介紹了對于Python裝飾器使用的一些建議,裝飾器是Python學(xué)習(xí)進(jìn)階中的重要知識(shí),需要的朋友可以參考下
    2015-06-06
  • Django?ORM?F對象和Q對象查詢

    Django?ORM?F對象和Q對象查詢

    Django提供了兩個(gè)非常有用的工具:F對象和Q對象,方便了在一些特殊場景下的查詢過程,這篇文章主要介紹了Django?ORM?F對象和Q對象查詢,需要的朋友可以參考下
    2022-10-10
  • PyTorch零基礎(chǔ)入門之構(gòu)建模型基礎(chǔ)

    PyTorch零基礎(chǔ)入門之構(gòu)建模型基礎(chǔ)

    PyTorch是一個(gè)開源的Python機(jī)器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序,它是一個(gè)可續(xù)計(jì)算包,提供兩個(gè)高級功能:1、具有強(qiáng)大的GPU加速的張量計(jì)算(如NumPy)。2、包含自動(dòng)求導(dǎo)系統(tǒng)的深度神經(jīng)網(wǎng)絡(luò)
    2021-10-10
  • 關(guān)于python中第三方庫交叉編譯的問題

    關(guān)于python中第三方庫交叉編譯的問題

    這篇文章主要介紹了python及第三方庫交叉編譯,通過交叉編譯工具,我們就可以在CPU能力很強(qiáng)、存儲(chǔ)控件足夠的主機(jī)平臺(tái)上(比如PC上)編譯出針對其他平臺(tái)的可執(zhí)行程序,需要的朋友可以參考下
    2022-09-09
  • Python關(guān)于抽獎(jiǎng)系統(tǒng)的思考與設(shè)計(jì)思路

    Python關(guān)于抽獎(jiǎng)系統(tǒng)的思考與設(shè)計(jì)思路

    這篇文章主要介紹了Python關(guān)于抽獎(jiǎng)系統(tǒng)的思考與設(shè)計(jì)思路,本文通過一些簡單的例子來說一說抽獎(jiǎng)系統(tǒng)背后的邏輯,看看究竟是你運(yùn)氣不好還是系統(tǒng)邏輯在作怪,需要的朋友可以參考下
    2023-03-03
  • django傳值給模板, 再用JS接收并進(jìn)行操作的實(shí)例

    django傳值給模板, 再用JS接收并進(jìn)行操作的實(shí)例

    今天小編就為大家分享一篇django傳值給模板, 再用JS接收并進(jìn)行操作的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python內(nèi)建類型bytes深入理解

    Python內(nèi)建類型bytes深入理解

    這篇文章主要為大家介紹了Python內(nèi)建類型bytes的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • linux平臺(tái)使用Python制作BT種子并獲取BT種子信息的方法

    linux平臺(tái)使用Python制作BT種子并獲取BT種子信息的方法

    這篇文章主要介紹了linux平臺(tái)使用Python制作BT種子并獲取BT種子信息的方法,結(jié)合實(shí)例形式詳細(xì)分析了Python BT模塊的安裝及針對BT種子文件的相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • 淺談Selenium+Webdriver 常用的元素定位方式

    淺談Selenium+Webdriver 常用的元素定位方式

    這篇文章主要介紹了淺談Selenium+Webdriver 常用的元素定位方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論