threading.Thread() 是 Python 標準函式庫中的一個,可以簡單地 在背景中執行異步任務 的工具。
無需安裝額外的外部函式庫,並且在 實現簡單的並行處理 時非常有用。

Python threading.Thread structure


1. 何時使用

  • 當任務耗時較長但 失敗不會造成致命影響
  • 在網頁伺服器中 快速響應用戶,並想要單獨處理其餘的後續處理時
  • 在導入像是 Celery, Redis 等重型系統之前,想要以輕量方式進行異步處理

2. 使用判斷標準

情況 推薦與否
想快速響應時 ✅ 使用適合
工作時間短或中等時 ✅ 使用適合
工作失敗時不會造成致命影響 ✅ 使用適合
穩定性及監控重要時 ❌ 建議使用 Celery 等
需要謹慎處理資料庫交易時 ⚠️ 使用 ORM 需謹慎

3. 使用示例

import threading
import time

def background_task():
    print("背景任務開始")
    time.sleep(3)
    print("背景任務完成")

# 執行線程
thread = threading.Thread(target=background_task)
thread.start()

print("主線程結束")

target=函數名稱: 指定要執行的函數
args=(arg1, arg2, ...)可以傳遞參數
必須調用 .start() 才能讓線程實際執行


4. 在 Django 使用的注意事項

  • Django 的 ORM 並非線程安全,因此 需注意 DB 交易處理
  • 如果在線程內部發生異常,並不會自動捕獲 → 一定要使用 try/except
  • 如果在線程內部使用與請求相關的資訊,則需確認其有效性(如:request.user 等)
  • 建議通過日誌 實現檢測後處理任務是否失敗

5. 總結

優點 缺點
簡單(無需安裝) 無法自動重試/監控
提高響應速度 可能與 ORM 衝突
能夠進行超輕量的異步處理 工作失敗時管理困難

6. Jesse 的評論

threading.Thread() 是一個非常好的方法,可以快速進行異步處理,而不會對伺服器造成重大負擔。
作為通往 Celery 的中間階段,它在實務中可以成為一個相當強大的工具。