1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        如何用 Python 實(shí)現(xiàn)優(yōu)先級(jí)調(diào)度器?

        共 2579字,需瀏覽 6分鐘

         ·

        2021-05-07 02:59

        作者:kingname

        來源:未聞Code

        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(51, do_work, argument=('kingname', ))
        sch.run()

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

        其中,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í)行。但需要注意的是,如果你這樣寫:

        import sched

        def do_work(name):
            print(f'你好:{name}')

        sch = sched.scheduler()
        sch.enter(52, do_work, argument=('產(chǎn)品經(jīng)理', ))
        sch.enter(51, do_work, argument=('kingname', ))
        sch.run()

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

        為什么這里優(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í)間來計(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)行效果如下圖所示:

        sch.enterabs()的第一個(gè)參數(shù)是任務(wù)開始時(shí)間的時(shí)間戳,這是一個(gè)絕對(duì)時(shí)間,這個(gè)時(shí)間可以使用datetime模塊來生成,或者其他你熟悉的方式。后面的參數(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='寫代碼'):
            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(52, 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ù)對(duì)應(yīng)的元組存放普通參數(shù),kwargs對(duì)應(yīng)的字典存放帶參數(shù)名的參數(shù)。

        Python貓技術(shù)交流群開放啦!群里既有國(guó)內(nèi)一二線大廠在職員工,也有國(guó)內(nèi)外高校在讀學(xué)生,既有十多年碼齡的編程老鳥,也有中小學(xué)剛剛?cè)腴T的新人,學(xué)習(xí)氛圍良好!想入群的同學(xué),請(qǐng)?jiān)诠?hào)內(nèi)回復(fù)『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠(chéng)勿擾?。?/span>~


        還不過癮?試試它們




        Python 為了提升性能,竟運(yùn)用了共享經(jīng)濟(jì)

        Python 中如何實(shí)現(xiàn)參數(shù)化測(cè)試?

        為什么 Python 多線程無法利用多核?

        酷炫!Python函數(shù)耗時(shí)異常自動(dòng)化監(jiān)控!

        Python向左,數(shù)學(xué)向右:烏拉姆的素?cái)?shù)研究

        Python最會(huì)變魔術(shù)的魔術(shù)方法,我覺得是它!


        如果你覺得本文有幫助
        請(qǐng)慷慨分享點(diǎn)贊,感謝啦!
        瀏覽 66
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            中文字幕在线观看免费高清完整版在线 | 性ⅹxx东北老太老头国产 | 嗯啊舒服视频 | 成人在线无码在线 | 日本伦理电影在线免费看 | 麻豆91在线 | A级一片 一线天在线 | www.人人摸 | 337p粉嫩大胆噜噜噜亚瑟影院 | 国产成人精品自拍视频 |