Celery 工作執行後在後端儲存的工作結果,如果長時間存在,可能會佔用儲存容量並影響性能。 Django-celery-beat 和 Celery 分別提供了可以清理後端數據的選項,以解決此問題。本文將介紹 `CELERY_TASK_RESULT_EXPIRES` 設置 和 Django-celery-beat 的 `celery.backend_cleanup` 任務,並解釋兩者的使用建議。
1. CELERY_TASK_RESULT_EXPIRES
:設置工作結果的有效期選項
CELERY_TASK_RESULT_EXPIRES
是設置單個工作結果在後端存在多長時間的選項,以秒為單位。該設置在 Celery 工作安排到後端時,以TTL(存活時間)的方式運作,使得工作結果在指定時間之後自動刪除。
- 設置示例:
CELERY_TASK_RESULT_EXPIRES = 86400 # 24小時(以秒為單位)
- 通過此設置,工作結果在24小時後將自動從後端刪除。TTL 設置在需要調整每個工作的有效期時非常有用,以避免後端積累不必要的數據。
2. Django-celery-beat 的 celery.backend_cleanup
:定期清理任務
如果使用 Django-celery-beat,celery.backend_cleanup
任務將定期清理後端積累的舊工作結果。此清理任務預設為每天執行一次,可以在 Django 管理後台調整執行頻率,設置為更頻繁或更不頻繁執行。定期清理任務可防止後端積累舊數據,即使沒有 TTL 設置。
- 頻率設置示例:根據 Django 管理後台調整
celery.backend_cleanup
的執行頻率,如果實時數據較多,可以設置得更短,否則可以保持預設值(一天)。
3. 結論:應該選擇哪種設置?
CELERY_TASK_RESULT_EXPIRES
和 celery.backend_cleanup
設置具有重疊的功能,因此只使用其中一個就足以執行後端的內存管理。不過,根據需求也可以同時啟用兩者。
- 使用 Django-celery-beat 的情況下:由於
celery.backend_cleanup
任務定期執行後端清理,因此主要可以預約這個清理任務,而不需要設置 TTL。 - 通過代碼預約 Celery 工作的情況下:如果不使用 Django-celery-beat 直接編寫工作預約代碼,則建議設置
CELERY_TASK_RESULT_EXPIRES
以管理 TTL。這樣可以使每個工作結果在設定時間後自動刪除,從而有效地管理後端內存。
總結:只需 Django-celery-beat 的清理任務或 TTL 設置即可實現後端管理,對於 Django-celery-beat 用戶來說,預約清理任務是合適的,而對於通過代碼預約的情況,則建議使用 TTL 設置。還可以透過同時使用兩者來進行更細緻的數據管理。

Add a New Comment