threading.Thread()
是 Python 標準函式庫中的一個,可以簡單地 在背景中執行異步任務 的工具。
無需安裝額外的外部函式庫,並且在 實現簡單的並行處理 時非常有用。
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 的中間階段,它在實務中可以成為一個相當強大的工具。
目前沒有評論。