schedule任務調度及其用法(多線程並發)


如果需要執行更復雜的任務調度,則可使用 Python 提供的 sched 模塊。該模塊提供了 sched.scheduler 類,該類代表一個任務調度器。

sched.scheduler(timefunc=time.monotonic, delayfunc=time.sleep) 構造器支持兩個參數:

  1. timefunc:該參數指定生成時間戳的時間函數,默認使用 time.monotonic 來生成時間戳。
  2. delayfunc:該參數指定阻塞程序的函數,默認使用 time.sleep 函數來阻塞程序。


sched.scheduler 調度器支持如下常用屬性和方法:

scheduler.enterabs(time, priority, action, argument=(), kwargs={}):指定在 time 時間點執行 action 函數,argument 和 kwargs 都用於向 action 函數傳入參數,其中 argument 使用位置參數的形式傳入參數,kwargs 使用關鍵字參數的形式傳入參數。該方法返回一個 event,它可作為 cancel() 方法的參數用於取消該調度。priority 參數指定該任務的優先級,當在同一個時間點有多個任務需要執行時,優先級高(值越小代表優先級越高)的任務會優先執行。

1.scheduler.enter(delay, priority, action, argument=(),kwargs={}):該方法與上一個方法基本相同,只是 delay 參數用於指定多少秒之后執行 action 任務。

2.scheduler.cancel(event):取消任務。如果傳入的 event 參數不是當前調度隊列中的 event,程序將會引發 ValueError 異常。

3.scheduler.empty():判斷當前該調度器的調度隊列是否為空。

4.scheduler.run(blocking=True):運行所有需要調度的任務。如果調用該方法的 blocking 參數為 True,該方法將會阻塞線程,直到所有被調度的任務都執行完成。

5.scheduler.queue:該只讀屬性返回該調度器的調度隊列。

 

import sched, time
import threading
# 定義線程調度器
s = sched.scheduler()
# 定義被調度的函數
def print_time(name='default'):
    print("%s 的時間: %s" % (name, time.ctime()))
print('主線程:', time.ctime())
# 指定10秒之后執行print_time函數
s.enter(10, 1, print_time)
# 指定5秒之后執行print_time函數,優先級為2
s.enter(5, 2, print_time, argument=('位置參數',))
# 指定5秒之后執行print_time函數,優先級為1
s.enter(5, 1, print_time, kwargs={'name': '關鍵字參數'})
# 執行調度的任務
s.run()
print('主線程:', time.ctime())

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM