自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一日一技:Python自帶的優(yōu)先級(jí)調(diào)度器

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

[[395371]]

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

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

  1. import sched 
  2.  
  3. def do_work(name): 
  4.     print(f'你好:{name}'
  5.  
  6. sch = sched.scheduler() 
  7. sch.enter(5, 1, do_work, argument=('kingname', )) 
  8. 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í)行。但需要注意的是,如果你這樣寫(xiě):

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

那么先打印出來(lái)的是你好:產(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í)間來(lái)計(jì)算的,后一行代碼比前一行代碼晚了幾毫秒,所以實(shí)際上產(chǎn)品經(jīng)理這一行會(huì)先到時(shí)間,所以就會(huì)先運(yùn)行。

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

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

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

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ù):

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

 

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

 

責(zé)任編輯:武曉燕 來(lái)源: 未聞Code
相關(guān)推薦

2021-04-12 21:19:01

PythonMakefile項(xiàng)目

2021-04-05 14:47:55

Python多線程事件監(jiān)控

2024-11-13 09:18:09

2021-04-27 22:15:02

Selenium瀏覽器爬蟲(chóng)

2021-03-12 21:19:15

Python鏈?zhǔn)?/a>調(diào)用

2024-07-30 08:11:16

2024-07-30 08:16:18

Python代碼工具

2021-09-13 20:38:47

Python鏈?zhǔn)?/a>調(diào)用

2021-07-27 21:32:57

Python 延遲調(diào)用

2021-11-12 05:00:43

裝飾器代碼功能

2021-10-15 21:08:31

PandasExcel對(duì)象

2022-06-28 09:31:44

LinuxmacOS系統(tǒng)

2022-03-12 20:38:14

網(wǎng)頁(yè)Python測(cè)試

2023-10-29 09:16:49

代碼安全命令

2020-05-19 13:55:38

Python加密密碼

2024-02-20 22:13:48

Python項(xiàng)目Java

2023-10-28 12:14:35

爬蟲(chóng)JavaScriptObject

2021-04-19 23:29:44

MakefilemacOSLinux

2024-11-11 00:38:13

Mypy靜態(tài)類(lèi)型

2021-10-03 20:08:29

HTTP2Scrapy
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)