使用Python的apscheduler庫中的BackgroundScheduler實現投遞多執行緒任務的示例程式碼。這個示例將展示如何根據任務ID投遞和停止任務,設定任務同時執行的上限,以及刪除全部任務。
首先,確保你已經安裝了apscheduler庫:
``
pip install apscheduler
``
程式碼示例:
``
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.executors.pool import ThreadPoolExecutor
from apscheduler.jobstores.memory import MemoryJobStore
import time
# 定義任務函式
def my_task(task_id):
print(f"任務 {task_id} 正在執行")
time.sleep(5) # 模擬任務執行需要一些時間
print(f"任務 {task_id} 完成")
# 初始化排程器
jobstores = {
'default': MemoryJobStore()
}
executors = {
'default': ThreadPoolExecutor(2) # 設定任務同時執行上限為2
}
job_defaults = {
'coalesce': False, # 設定任務上限時不合並
'max_instances': 2 # 每個任務的最大例項數為2
}
scheduler = BackgroundScheduler(jobstores=jobstores, executors=executors, job_defaults=job_defaults)
scheduler.start()
# 根據任務ID新增任務
def add_task(task_id):
scheduler.add_job(my_task, 'interval', seconds=10, id=task_id, args=[task_id])
print(f"任務 {task_id} 已新增")
# 根據任務ID停止任務
def stop_task(task_id):
scheduler.remove_job(task_id)
print(f"任務 {task_id} 已停止")
# 刪除全部任務
def remove_all_tasks():
scheduler.remove_all_jobs()
print("所有任務已刪除")
# 示例使用
if __name__ == "__main__":
# 新增任務
add_task('task1')
add_task('task2')
# 等待一段時間,讓任務執行幾次
time.sleep(30)
# 停止任務
stop_task('task1')
# 等待一段時間,觀察任務2繼續執行
time.sleep(20)
# 刪除所有任務
remove_all_tasks()
# 等待排程器關閉
scheduler.shutdown()
print("排程器已關閉")
``
注意事項
任務上限設定:透過設定executors中的ThreadPoolExecutor來限制同時執行的任務數量。這裡設定為2。
任務合併(coalesce):設定job_defaults中的coalesce為False,表示當任務積壓時不合並執行。
任務例項限制:設定job_defaults中的max_instances為2,表示每個任務的最大例項數為2。
任務ID:確保任務ID唯一,以便正確管理任務的啟動和停止。
透過以上示例程式碼和解釋,你可以瞭解如何使用BackgroundScheduler實現多執行緒任務的投遞、停止和管理。