Celery 作業が実行された後、バックエンドに保存される作業結果は、長時間放置されるとストレージの容量を占め、パフォーマンスに影響を及ぼす可能性があります。 Django-celery-beat と Celery はこの問題を解決するために、それぞれの方法でバックエンドデータを整理するオプションを提供しています。この記事では、 `CELERY_TASK_RESULT_EXPIRES` 設定 と Django-celery-beat の `celery.backend_cleanup` タスク について説明し、2つの設定の使用推奨事項を説明します。
1. CELERY_TASK_RESULT_EXPIRES
: 作業結果の有効期間を設定するオプション
CELERY_TASK_RESULT_EXPIRES
は、個別作業の結果がバックエンドにどれくらいの間残るかを秒単位で設定するオプションです。この設定は Celery 作業をバックエンドに予約した際に TTL (Time-To-Live) 方式で動作し、作業結果が指定された時間を過ぎると自動的に削除されるようにします。
- 設定例:
CELERY_TASK_RESULT_EXPIRES = 86400 # 24時間(秒単位)
- この設定により、作業結果が 24時間後にバックエンドから自動的に削除 されます。TTL 設定は作業ごとの有効期間を調整する際に便利で、バックエンドに不要なデータが蓄積されないようにします。
2. Django-celery-beat の celery.backend_cleanup
: 定期クリンアップタスク
Django-celery-beat を使用する場合、 celery.backend_cleanup
タスクが バックエンドに蓄積された古い作業結果を定期的に整理 します。このクリンアップタスクは基本的に1日1回実行されるように予約されており、Django Admin で周期を調整してより頻繁または少なく実行するように設定できます。定期的なクリンアップタスクは TTL 設定がなくても自動的にバックエンドに古いデータが蓄積されるのを防 いでくれます。
- 周期設定例: Django Admin で
celery.backend_cleanup
の周期を調整して、リアルタイムデータが多い場合は短く、そうでない場合はデフォルト (1日) のままにすることができます。
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