<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          又一個(gè)好用的 Python自帶模塊:優(yōu)先級(jí)調(diào)度器

          共 5560字,需瀏覽 12分鐘

           ·

          2021-05-10 13:57

          點(diǎn)擊上方Python知識(shí)圈設(shè)為星標(biāo)

          回復(fù)100獲取100題PDF

          閱讀文本大概需要 5 分鐘


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

          這個(gè)模塊的使用非常簡單,首先以延遲隊(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ù)。


          PS:我自己建了一個(gè)每天可領(lǐng)外賣優(yōu)惠券的號(hào),經(jīng)常領(lǐng)到15元的無門檻券不花冤枉錢~
          加微信送《Python知識(shí)點(diǎn)100題PDF》

          pk哥個(gè)人微信


          添加pk哥個(gè)人微信即送Python資料


          Python知識(shí)點(diǎn)100題的PDF

          Python相關(guān)的電子書10本


          記得備注:“100題”

              
                   



          往期推薦
          01

          公眾號(hào)所有文章匯總導(dǎo)航(2-10更新)

          02

          永久白嫖!新發(fā)現(xiàn)的外賣漏洞!!請(qǐng)低調(diào)使用

          03

          求你了,別再用 pip 那烏龜?shù)乃俣热グ惭b庫了!


          點(diǎn)擊閱讀原文查看pk哥原創(chuàng)視頻

          我就知道你“在看”


          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月开心色播 | av第一页 | 亚洲无码高清在线观看 | 欧美一级视频在线观看 | 亚洲黄色视频网站在线观看 |