溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python自帶的優(yōu)先級(jí)調(diào)度器有什么用

發(fā)布時(shí)間:2021-07-06 12:04:14 來(lái)源:億速云 閱讀:127 作者:chen 欄目:編程語(yǔ)言

本篇內(nèi)容主要講解“Python自帶的優(yōu)先級(jí)調(diào)度器有什么用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Python自帶的優(yōu)先級(jí)調(diào)度器有什么用”吧!

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

這個(gè)模塊的使用非常簡(jiǎn)單,首先以延遲隊(duì)列為例:

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

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

Python自帶的優(yōu)先級(jí)調(diào)度器有什么用

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

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

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

Python自帶的優(yōu)先級(jí)調(diào)度器有什么用

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

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

為了使用絕對(duì)的精確時(shí)間,我們可以使用另外一個(gè)方法:

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

運(yùn)行效果如下圖所示:

Python自帶的優(yōu)先級(jí)調(diào)度器有什么用

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

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

import sched import time import datetime  def do_work(name, place, work='寫(xiě)代碼'):     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': '寫(xiě)需求文檔'}) sch.enterabs(start_time_ts, 1, do_work, argument=('kingname', '產(chǎn)品經(jīng)理旁邊'), kwargs={'work': '看著她'}) sch.run()

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

到此,相信大家對(duì)“Python自帶的優(yōu)先級(jí)調(diào)度器有什么用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

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

AI