私はdjango-celeryを読んで、celery_taskmetaをクリーンアップするネイティブな方法を見つけようとしているので、このテーブルは実稼働環境ではあまり大きくなりません。
何も見つかりません。これに対処するためのコマンドを実行する必要がありますか?
私はdjango-celeryを読んで、celery_taskmetaをクリーンアップするネイティブな方法を見つけようとしているので、このテーブルは実稼働環境ではあまり大きくなりません。
何も見つかりません。これに対処するためのコマンドを実行する必要がありますか?
私はdjango-celeryを使用していないので、答えが不完全である可能性があります。
バックエンドには、celery_taskmetaのクリーンアップを強制できるメソッドがあります。celery.backends.base.BaseBackendには、メソッドcleanup()があります。
したがって、クリーンアップを強制する必要がある場合、3つの方法があります。
# Launch a task
my_task = add_a_task() # use the Task.delay() method for example
# my_task is a celery.result.AsyncResult instance
# Retrieve backend and call cleanup
my_task.backend.cleanup()
from celery import Task
from .celery_app import my_celery_app
# Class for a task
@my_celery_app.task()
class CopyTask(Task):
# A Task instance got a backend property
def run(self,**kwargs):
""" Running method of the task """
# Do something
pass
def force_cleanup(self):
""" Force cleanup. """
self.backend.cleanup()
タスク自体でクリーンアップを呼び出すことは、ひどく静かに見えることに注意してください。
3番目のオプションは、バックエンドcelery_taskmetaをクリーンアップするcelerybeatタスクを使用することです。これはおそらく私が選ぶものです。
セロリビートは基本的にスケジューラーであり、あなたはあなたが望むタスクを実行することができます。したがって、次のような専用のタスクを実行できます。
from celery import Task
from .celery_app import my_celery_app
# Class for a task
@my_celery_app.task()
class CleanupTask(Task):
# A Task instance got a backend property
def run(self,**kwargs):
""" Running method of the task """
# Cleanup here
self.backend.cleanup()
crontabジョブのようにセロリビートを設定することは十分に文書化されています
このSQLステートメントを実行するDjangoコマンドを実行するcronジョブがあります。
"truncate table celery_taskmeta"
0.47msで50.000レコードを削除しました。