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

Python?4種實(shí)現(xiàn)定時(shí)任務(wù)的方案

 更新時(shí)間:2021年12月15日 08:34:43   作者:遲業(yè)  
這篇文章主要給大家分享了Python?4種實(shí)現(xiàn)定時(shí)任務(wù)的方案,運(yùn)用 while True: + sleep()、Timeloop 庫(kù)、threading.Timer 、內(nèi)置模塊 sched ,下面就來(lái)看看具體的實(shí)現(xiàn)過(guò)程吧

1.利用 while True: + sleep() 實(shí)現(xiàn)定時(shí)任務(wù)

位于 time 模塊中的 sleep(secs) 函數(shù),可以實(shí)現(xiàn)令當(dāng)前執(zhí)行的線(xiàn)程暫停 secs 秒后再繼續(xù)執(zhí)行。所謂暫停,即令當(dāng)前線(xiàn)程進(jìn)入阻塞狀態(tài),當(dāng)達(dá)到 sleep() 函數(shù)規(guī)定的時(shí)間后,再由阻塞狀態(tài)轉(zhuǎn)為就緒狀態(tài),等待 CPU 調(diào)度。

基于這樣的特性我們可以通過(guò) while 死循環(huán)+sleep() 的方式實(shí)現(xiàn)簡(jiǎn)單的定時(shí)任務(wù)。

代碼示例:

import datetime

import time

def time_printer():

    now = datetime.datetime.now()

    ts = now.strftime('%Y-%m-%d %H:%M:%S')

    print('do func time :', ts)

def loop_monitor():

    while True:

        time_printer()

        time.sleep(5)  # 暫停 5 秒

if __name__ == "__main__":

    loop_monitor()

主要缺點(diǎn):

  • 只能設(shè)定間隔,不能指定具體的時(shí)間,比如每天早上 8:00
  • sleep 是一個(gè)阻塞函數(shù),也就是說(shuō) sleep 這一段時(shí)間,程序什么也不能操作。

2.使用 Timeloop 庫(kù)運(yùn)行定時(shí)任務(wù)

Timeloop[2] 是一個(gè)庫(kù),可用于運(yùn)行多周期任務(wù)。這是一個(gè)簡(jiǎn)單的庫(kù),它使用 decorator 模式在線(xiàn)程中運(yùn)行標(biāo)記函數(shù)。

示例代碼:

import time

from timeloop import Timeloop

from datetime import timedelta

tl = Timeloop()

@tl.job(interval=timedelta(seconds=2))

def sample_job_every_2s():

    print "2s job current time : {}".format(time.ctime())

@tl.job(interval=timedelta(seconds=5))

def sample_job_every_5s():

    print "5s job current time : {}".format(time.ctime())

@tl.job(interval=timedelta(seconds=10))

def sample_job_every_10s():

    print "10s job current time : {}".format(time.ctime())

3.利用 threading.Timer 實(shí)現(xiàn)定時(shí)任務(wù)

threading 模塊中的 Timer 是一個(gè)非阻塞函數(shù),比 sleep 稍好一點(diǎn),timer 最基本理解就是定時(shí)器,我們可以啟動(dòng)多個(gè)定時(shí)任務(wù),這些定時(shí)器任務(wù)是異步執(zhí)行,所以不存在等待順序執(zhí)行問(wèn)題。

Timer(interval, function, args=[ ], kwargs={ })

  • interval: 指定的時(shí)間
  • function: 要執(zhí)行的方法
  • args/kwargs: 方法的參數(shù)

代碼示例:

import datetime

from threading import Timer

def time_printer():

    now = datetime.datetime.now()

    ts = now.strftime('%Y-%m-%d %H:%M:%S')

    print('do func time :', ts)

    loop_monitor()

def loop_monitor():

    t = Timer(5, time_printer)

    t.start()

if __name__ == "__main__":

    loop_monitor()

備注:Timer 只能執(zhí)行一次,這里需要循環(huán)調(diào)用,否則只能執(zhí)行一次

4.利用內(nèi)置模塊 sched 實(shí)現(xiàn)定時(shí)任務(wù)

sched 模塊實(shí)現(xiàn)了一個(gè)通用事件調(diào)度器,在調(diào)度器類(lèi)使用一個(gè)延遲函數(shù)等待特定的時(shí)間,執(zhí)行任務(wù)。同時(shí)支持多線(xiàn)程應(yīng)用程序,在每個(gè)任務(wù)執(zhí)行后會(huì)立刻調(diào)用延時(shí)函數(shù),以確保其他線(xiàn)程也能執(zhí)行。

class sched.scheduler(timefunc, delayfunc) 這個(gè)類(lèi)定義了調(diào)度事件的通用接口,它需要外部傳入兩個(gè)參數(shù),timefunc 是一個(gè)沒(méi)有參數(shù)的返回時(shí)間類(lèi)型數(shù)字的函數(shù)(常用使用的如 time 模塊里面的 time),delayfunc 應(yīng)該是一個(gè)需要一個(gè)參數(shù)來(lái)調(diào)用、與 timefunc 的輸出兼容、并且作用為延遲多個(gè)時(shí)間單位的函數(shù)(常用的如 time 模塊的 sleep)。

代碼示例:

import datetime

import time

import sched

def time_printer():

    now = datetime.datetime.now()

    ts = now.strftime('%Y-%m-%d %H:%M:%S')

    print('do func time :', ts)

    loop_monitor()

def loop_monitor():

    s = sched.scheduler(time.time, time.sleep)  # 生成調(diào)度器

    s.enter(5, 1, time_printer, ())

    s.run()

if __name__ == "__main__":

    loop_monitor()

scheduler 對(duì)象主要方法:

  • enter(delay, priority, action, argument) ,安排一個(gè)事件來(lái)延遲 delay 個(gè)時(shí)間單位。
  • cancel(event):從隊(duì)列中刪除事件。如果事件不是當(dāng)前隊(duì)列中的事件,則該方法將跑出一個(gè) ValueError
  • run():運(yùn)行所有預(yù)定的事件。這個(gè)函數(shù)將等待(使用傳遞給構(gòu)造函數(shù)的 delayfunc() 函數(shù)),然后執(zhí)行事件,直到不再有預(yù)定的事件。

個(gè)人點(diǎn)評(píng):比 threading.Timer 更好,不需要循環(huán)調(diào)用。

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

相關(guān)文章

  • Python裝飾器入門(mén)學(xué)習(xí)教程(九步學(xué)習(xí))

    Python裝飾器入門(mén)學(xué)習(xí)教程(九步學(xué)習(xí))

    裝飾器(decorator)是一種高級(jí)Python語(yǔ)法。裝飾器可以對(duì)一個(gè)函數(shù)、方法或者類(lèi)進(jìn)行加工。本文給大家介紹Python裝飾器入門(mén)學(xué)習(xí)教程(九步學(xué)習(xí)),對(duì)python裝飾器相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-01-01
  • Python中將兩個(gè)或多個(gè)list合成一個(gè)list的方法小結(jié)

    Python中將兩個(gè)或多個(gè)list合成一個(gè)list的方法小結(jié)

    python中,list這種數(shù)據(jù)結(jié)構(gòu)很常用到,如果兩個(gè)或者多個(gè)list結(jié)構(gòu)相同,內(nèi)容類(lèi)型相同,我們通常會(huì)將兩個(gè)或者多個(gè)list合并成一個(gè),這樣我們?cè)傺h(huán)遍歷的時(shí)候就可以一次性處理掉了
    2019-05-05
  • Python使用turtle模塊繪制愛(ài)心圖案

    Python使用turtle模塊繪制愛(ài)心圖案

    這篇文章主要為大家詳細(xì)介紹了Python使用turtle模塊繪制愛(ài)心圖案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • python中迭代器(iterator)用法實(shí)例分析

    python中迭代器(iterator)用法實(shí)例分析

    這篇文章主要介紹了python中迭代器(iterator)用法,實(shí)例分析了Python中迭代器的相關(guān)使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • python模擬事件觸發(fā)機(jī)制詳解

    python模擬事件觸發(fā)機(jī)制詳解

    這篇文章主要為大家詳細(xì)介紹了python模擬事件觸發(fā)機(jī)制的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python實(shí)現(xiàn)JS解密并爬取某音漫客網(wǎng)站

    Python實(shí)現(xiàn)JS解密并爬取某音漫客網(wǎng)站

    這篇文章主要介紹了Python實(shí)現(xiàn)JS解密并爬取某音漫客網(wǎng)站,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • python函數(shù)之任意數(shù)量的實(shí)參方式

    python函數(shù)之任意數(shù)量的實(shí)參方式

    這篇文章主要介紹了python函數(shù)之任意數(shù)量的實(shí)參方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python實(shí)現(xiàn)樹(shù)形打印目錄結(jié)構(gòu)

    python實(shí)現(xiàn)樹(shù)形打印目錄結(jié)構(gòu)

    這篇文章主要為大家詳細(xì)介紹了python樹(shù)形打印目錄結(jié)構(gòu)的相關(guān)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 如何使用python獲取現(xiàn)在的日期與時(shí)間

    如何使用python獲取現(xiàn)在的日期與時(shí)間

    學(xué)習(xí)了一段時(shí)間的python,不知道大家對(duì)于代碼的編寫(xiě)有了屬于自己的一套思路了呢,下面這篇文章主要給大家介紹了關(guān)于如何使用python獲取現(xiàn)在的日期與時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Python深度學(xué)習(xí)實(shí)戰(zhàn)PyQt5窗口切換的堆疊布局示例詳解

    Python深度學(xué)習(xí)實(shí)戰(zhàn)PyQt5窗口切換的堆疊布局示例詳解

    本文以堆疊窗口控件為例,詳細(xì)介紹堆疊布局的界面設(shè)計(jì)和程序?qū)崿F(xiàn)過(guò)程,通過(guò)案例帶小白創(chuàng)建一個(gè)典型的堆疊布局多窗口切換程序
    2021-10-10

最新評(píng)論