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。也可以同时使用这两项设置以进一步细化数据管理。

댓글이 없습니다.