一日一技:Python自帶的優先級調度器

      網友投稿 624 2025-04-01

      Python 自帶一個調度器模塊sched,它能為你實現優先級隊列/延遲隊列和定時隊列。

      一日一技:Python自帶的優先級調度器

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

      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秒鐘以后執行do_work('kingname'),運行效果如下圖所示:

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

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

      那么先打印出來的是你好:產品經理,如下圖所示:

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

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

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

      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=('產品經理', )) sch.enterabs(start_time_ts, 1, do_work, argument=('kingname', )) sch.run()

      運行效果如下圖所示:

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

      如果你要運行的函數帶有多個參數或者默認參數,那么可以使用下面的方式傳入參數:

      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=('產品經理', '杭州'), kwargs={'work': '寫需求文檔'}) sch.enterabs(start_time_ts, 1, do_work, argument=('kingname', '產品經理旁邊'), kwargs={'work': '看著她'}) sch.run()

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

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:表格中如何直接跳到下一行快捷編輯(表格輸入怎么跳到下一行)
      下一篇:Office2019早期預覽版下載(暫未上線)
      相關文章
      久久精品国产亚洲av麻| 亚洲精品无码国产片| 亚洲黄色网址在线观看| 国产精品亚洲专区无码WEB| 亚洲电影一区二区三区| 亚洲国产精品一区二区第一页免| 亚洲国产精品久久久久秋霞影院| 中文字幕专区在线亚洲| 亚洲日本在线电影| 亚洲乱码卡一卡二卡三| 亚洲福利视频一区| 久久久影院亚洲精品| 亚洲第一视频网站| 亚洲第一页中文字幕| 国产亚洲福利精品一区| 亚洲人午夜射精精品日韩| 亚洲国产精品美女久久久久| 亚洲国产精品美女久久久久| 久久精品国产亚洲av天美18| 亚洲精品色在线网站| 一本色道久久88综合亚洲精品高清| 亚洲首页国产精品丝袜| 99ri精品国产亚洲| 亚洲大成色www永久网站| 图图资源网亚洲综合网站| 亚洲三级电影网址| 亚洲经典在线中文字幕| 亚洲av一本岛在线播放| 成人亚洲国产va天堂| 亚洲精品无码aⅴ中文字幕蜜桃| 老牛精品亚洲成av人片| 久久精品亚洲男人的天堂| 亚洲人成色777777在线观看| 亚洲精品美女久久久久99小说| AV在线播放日韩亚洲欧| 亚洲av中文无码乱人伦在线咪咕| 亚洲精品无码不卡在线播放HE| 久久久青草青青国产亚洲免观| 亚洲狠狠婷婷综合久久久久| 亚洲人成网站在线播放影院在线| 亚洲无限乱码一二三四区|