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

Python使用定時調(diào)度任務(wù)的方式

 更新時間:2021年09月23日 16:06:14   作者:Regan Yue  
Python 有幾種方法可以定時調(diào)度一個任務(wù),這就是我們將在本文中學(xué)習(xí)的內(nèi)容。接下倆下邊將給大家介紹5種Python使用定時調(diào)度任務(wù)方式,需要的朋友可以參考下面文章內(nèi)容吧

摘要:

今天構(gòu)建的大多數(shù)應(yīng)用程序都需要某種方式的調(diào)度機(jī)制。輪詢 API 或數(shù)據(jù)庫、不斷檢查系統(tǒng)健康狀況、將日志存檔等是常見的例子。 KubernetesApache Mesos等使用自動伸縮擴(kuò)容技術(shù)(Auto-scaling)的軟件需要檢查部署的應(yīng)用程序的狀態(tài),為此它們使用定期運行的存活探針(Liveness Probe)。調(diào)度任務(wù)需要與業(yè)務(wù)邏輯解耦,因此我們要使用解耦的執(zhí)行隊列,例如Redis隊列。

Python 有幾種方法可以定時調(diào)度一個任務(wù),這就是我們將在本文中學(xué)習(xí)的內(nèi)容。我將使用以下方式討論調(diào)度任務(wù):

  • 簡單循環(huán) (Simple Loops
  • 簡單循環(huán)但是使用了線程 (Simple Loops but Threaded
  • 調(diào)度庫 (Schedule Library
  • Python Crontab
  • RQ 調(diào)度器作為解耦隊列 (RQ Scheduler as decoupled queues

1、簡單循環(huán) Simple loops

使用簡單循環(huán)來實現(xiàn)調(diào)度任務(wù)這是毫不費力的。使用無限運行的 while 循環(huán)定期調(diào)用函數(shù)可用于調(diào)度作業(yè),但這不是最好的方法,不過它是很有效的??梢允褂脙?nèi)置time模塊的slleep()來延遲執(zhí)行。不過這并不是大多數(shù)作業(yè)的調(diào)度方式,因為,它看起來很難看,而且與其他方法相比,它的可讀性較差。

import time
​
def task():
    print("Job Completed!")
​
 while 1:
    task()
    time.sleep(10)


當(dāng)涉及到每天早上 9:00 或每周三晚上 7:45 等這些日程安排時,事情就變得比較棘手了。

import datetime
​
def task():
    print("Job Completed!")
​
 while 1:
    now = datetime.datetime.now()
    # schedule at every wednesday,7:45 pm
    if now.weekday == 3 and now.strftime("%H:%m") == "19:45":
        task()
    # sleep for 6 days
    time.sleep(6 * 24 * 60 * 60)


這是我的第一時間想到的解決辦法,不用謝!這種方法的一個問題是這里的邏輯是阻塞的,即一旦在 python 項目中發(fā)現(xiàn)這段代碼,它就會卡在 while 1 循環(huán)中,從而阻塞其他代碼的執(zhí)行。

2、簡單循環(huán)但是使用了線程Simple loops but threaded

線程是計算機(jī)科學(xué)中的一個概念。具有自己指令的小程序由進(jìn)程執(zhí)行并獨立管理,這就可以解決我們第一種方法的阻塞情況,讓我們看看怎么樣。

import time
import threading
​
def task():
    print("Job Completed!")
​
def schedule():
    while 1:
        task()
        time.sleep(10)
​
# makes our logic non blocking
thread = threading.Thread(target=schedule)
thread.start()


線程啟動后,其底層邏輯無法被主線程修改,因此我們可能需要添加資源,程序通過這些資源可以檢查特定場景并根據(jù)它們執(zhí)行邏輯。

3、定時調(diào)度庫 Schedule Library

早些時候,我說使用 while 循環(huán)進(jìn)行調(diào)度看起來很丑陋,調(diào)度庫可以解決這個問題。

import schedule
import time
​
def task():
    print("Job Executing!")
​
# for every n minutes
schedule.every(10).minutes.do(task)
​
# every hour
schedule.every().hour.do(task)
​
# every daya at specific time
schedule.every().day.at("10:30").do(task)
​
# schedule by name of day
schedule.every().monday.do(task)
​
# name of day with time
schedule.every().wednesday.at("13:15").do(task)
​
while True:
    schedule.run_pending()
    time.sleep(1)


正如您所見,通過這樣我們可以毫不費力地創(chuàng)建多個調(diào)度計劃。我特別喜歡創(chuàng)建作業(yè)的方式和方法鏈(Method Chaining),另一方面,這個片段有一個 while 循環(huán),這意味著代碼被阻塞,不過我相信你已經(jīng)知道什么可以幫助我們解決這個問題。

4、Python Crontab

Liunx 中的 crontab 實用程序是一種易于使用且被廣泛接受的調(diào)度解決方案。Python python-crontab提供了一個 API 來使用 Python 中的 CLI 工具。在crontab中,一個定時調(diào)度使用 unix-cron字符串格式( *)來描述,它是一組五個值的一條線,這表明當(dāng)作業(yè)應(yīng)該被執(zhí)行時,python-crontab 將在文件中寫入 crontab 的計劃轉(zhuǎn)換為寫入編程方法。

from crontab import CronTab
​
cron = CronTab(user='root')
​
job = cron.new(command='my_script.sh')
​
job.hour.every(1)
cron.write()


python-crontab 不會自動保存計劃,需要執(zhí)行 write() 方法來保存計劃。還有更多功能,我強(qiáng)烈建議您查看他們的文檔。

5、RQ 調(diào)度器 RQ Scheduler

有些任務(wù)不能立即執(zhí)行,因此我們需要根據(jù) LIFO FIFO 等隊列系統(tǒng)創(chuàng)建任務(wù)隊列并彈出任務(wù)。python-rq允許我們做到這一點,使用 Redis 作為代理來排隊作業(yè)。新作業(yè)的條目存儲為帶有信息的哈希映射,例如created_at, enqueued_at, origin, data, description.

排隊任務(wù)由名為 worker 的程序執(zhí)行。workers Redis 緩存中也有一個條目,負(fù)責(zé)將任務(wù)出列以及更新 Redis 中的任務(wù)狀態(tài)。任務(wù)可以在需要時排隊,但要安排它們,我們需要rq-scheduler。

from rq_scheduler import Scheduler
​
queue = Queue('circle', connection=Redis())
scheduler = Scheduler(queue=queue)
​
scheduler.schedule(
    scheduled_time=datetime.utcnow(), # Time for first execution, in UTC timezone
    func=func,                     # Function to be queued
    args=[arg1, arg2],             # Arguments passed into function when executed
    kwargs={'foo': 'bar'},         # Keyword arguments passed into function when executed
    interval=60,                   # Time before the function is called again, in seconds
    repeat=None,                     # Repeat this number of times (None means repeat forever)
    meta={'foo': 'bar'}            # Arbitrary pickleable data on the job itself
)


RQ worker(RQ 工作器)必須在終端中單獨啟動或通過 python-rq 工作器啟動。一旦任務(wù)被觸發(fā),就可以在工作終端中看到,在成功和失敗場景中都可以使用單獨的函數(shù)回調(diào)。

6、總結(jié) Conclusion

還有一些用于調(diào)度的庫,但在這里,我已經(jīng)討論了最常見的庫。值得一提的是Celery,celery 的另一個優(yōu)點是用戶可以在多個代理之間進(jìn)行選擇。我很感激你讀到最后。也可以看看我的其他文章。干杯!

到此這篇關(guān)于Python使用定時調(diào)度任務(wù)的方式的文章就介紹到這了,更多相關(guān)Python使用定時調(diào)度任務(wù)方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python的10道簡單測試題(含答案)

    Python的10道簡單測試題(含答案)

    這篇文章主要介紹了Python的10道簡單測試題(含答案),學(xué)習(xí)了一段時間python的小伙伴來做幾道測試題檢驗一下自己的學(xué)習(xí)成果吧
    2023-04-04
  • Python實現(xiàn)單向鏈表

    Python實現(xiàn)單向鏈表

    這篇文章主要為大家詳細(xì)介紹了Python實現(xiàn)單向鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)

    python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù)(流程分析)

    這篇文章主要介紹了python基于OpenCV模塊實現(xiàn)視頻流數(shù)據(jù)切割為圖像幀數(shù)據(jù),這里今天主要是實踐一下視頻流數(shù)據(jù)的預(yù)處理工作,需要的朋友可以參考下
    2022-05-05
  • 關(guān)于Python常用函數(shù)中NumPy的使用

    關(guān)于Python常用函數(shù)中NumPy的使用

    這篇文章主要介紹了關(guān)于Python常用函數(shù)中NumPy的使用,在Python中有很多常用的函數(shù),NumPy就是其中之一,那么NumPy該怎么使用,下面就一起來看看吧
    2023-03-03
  • python自動化測試selenium操作下拉列表實現(xiàn)

    python自動化測試selenium操作下拉列表實現(xiàn)

    這篇文章主要為大家介紹了python自動化測試selenium操作下拉列表實現(xiàn)方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • python使用xlrd和xlwt讀寫Excel文件的實例代碼

    python使用xlrd和xlwt讀寫Excel文件的實例代碼

    這篇文章主要介紹了python使用xlrd和xlwt讀寫Excel文件的實例代碼,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • numpy模塊中axis的理解與使用

    numpy模塊中axis的理解與使用

    而在numpy中有很多的函數(shù)都涉及到axis,numpy中的軸axis是很重要的,許多numpy的操作根據(jù)axis的取值不同,作出的操作也不相同,這篇文章主要給大家介紹了關(guān)于numpy模塊中axis的理解與使用的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • python使用pyaudio錄音和格式轉(zhuǎn)化方式

    python使用pyaudio錄音和格式轉(zhuǎn)化方式

    這篇文章主要介紹了python使用pyaudio錄音和格式轉(zhuǎn)化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 解決pycharm中導(dǎo)入自己寫的.py函數(shù)出錯問題

    解決pycharm中導(dǎo)入自己寫的.py函數(shù)出錯問題

    今天小編就為大家分享一篇解決pycharm中導(dǎo)入自己寫的.py函數(shù)出錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python使用opencv切割圖片白邊

    python使用opencv切割圖片白邊

    這篇文章主要為大家詳細(xì)介紹了python使用opencv切割圖片的白邊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一
    2021-09-09

最新評論