溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python優(yōu)先級調度器怎么使用

發(fā)布時間:2022-05-25 09:55:09 來源:億速云 閱讀:193 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“Python優(yōu)先級調度器怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python優(yōu)先級調度器怎么使用”吧!

Python 自帶一個調度器模塊sched,它能為你實現(xiàn)優(yōu)先級隊列/延遲隊列和定時隊列。

這個模塊的使用非常簡單,首先以延遲隊列為例:

import sched  def do_work(name):     print(f'你好:{name}')  sch = sched.scheduler() sch.enter(5, 1, do_work, argument=('kingname', )) sch.run()

代碼運行以后,會卡在sch.run()這里,5秒鐘以后執(zhí)行do_work('kingname'),運行效果如下圖所示:

Python優(yōu)先級調度器怎么使用

其中,sch.enter()的第一個參數(shù)為延遲的時間,單位為秒,第二個參數(shù)為優(yōu)先級,數(shù)字越小優(yōu)先級越高。當兩個任務同時要執(zhí)行時,優(yōu)先級高的先執(zhí)行。但需要注意的是,如果你這樣寫:

import sched  def do_work(name):     print(f'你好:{name}')  sch = sched.scheduler() sch.enter(5, 2, do_work, argument=('產(chǎn)品經(jīng)理', )) sch.enter(5, 1, do_work, argument=('kingname', )) sch.run()

那么先打印出來的是你好:產(chǎn)品經(jīng)理,如下圖所示:

Python優(yōu)先級調度器怎么使用

為什么這里優(yōu)先級失效了?1的優(yōu)先級大于2,應該先運行下面的才對啊。

這是由于,只有當兩個任務同時運行的時候,才會去檢查優(yōu)先級。如果兩個任務觸發(fā)的時間一前一后,那么還輪不到比較優(yōu)先級。由于延遲隊列的延遲是相對于當前運行這一行代碼的時間來計算的,后一行代碼比前一行代碼晚了幾毫秒,所以實際上產(chǎn)品經(jīng)理這一行會先到時間,所以就會先運行。

為了使用絕對的精確時間,我們可以使用另外一個方法:

import sched import time import datetime  def do_work(name):     print(f'你好:{name}')  sch = sched.scheduler(time.time, time.sleep) start_time = datetime.datetime.now() + datetime.timedelta(seconds=10) start_time_ts = start_time.timestamp() sch.enterabs(start_time_ts, 2, do_work, argument=('產(chǎn)品經(jīng)理', )) sch.enterabs(start_time_ts, 1, do_work, argument=('kingname', )) sch.run()

運行效果如下圖所示:

Python優(yōu)先級調度器怎么使用

sch.enterabc()的第一個參數(shù)是任務開始時間的時間戳,這是一個絕對時間,這個時間可以使用datetime模塊來生成,或者其他你熟悉的方式。后面的參數(shù)和sch.enter()完全一樣。

如果你要運行的函數(shù)帶有多個參數(shù)或者默認參數(shù),那么可以使用下面的方式傳入?yún)?shù):

import sched import time import datetime  def do_work(name, place, work='寫代碼'):     print(f'你好:{name},你在:{place}{work}')  sch = sched.scheduler(time.time, time.sleep) start_time = datetime.datetime.now() + datetime.timedelta(seconds=10) start_time_ts = start_time.timestamp() sch.enter(5, 2, do_work, argument=('產(chǎn)品經(jīng)理', '杭州'), kwargs={'work': '寫需求文檔'}) sch.enterabs(start_time_ts, 1, do_work, argument=('kingname', '產(chǎn)品經(jīng)理旁邊'), kwargs={'work': '看著她'}) sch.run()

argument參數(shù)對應的元組存放普通參數(shù),kwargs對應的字典存放帶參數(shù)名的參數(shù)。

到此,相信大家對“Python優(yōu)先級調度器怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI