1. ホーム
  2. python

[解決済み] Celeryで実行中のタスクをキャンセルするには?

2022-09-30 11:31:12

質問

ドキュメントを読んだり、検索したりしていますが、明確な答えが見つからないようです。

すでに実行中のタスクをキャンセルすることはできますか。(タスクが開始され、しばらく時間がかかり、途中でキャンセルする必要があるような場合)

のドキュメントでこれを見つけました。 Celery FAQ

>>> result = add.apply_async(args=[2, 2], countdown=120)
>>> result.revoke()

しかし、これがキューに入れられたタスクをキャンセルするのか、ワーカー上で実行中のプロセスを殺すのか、はっきりしません。 どんな光でもありがとうございます!

どのように解決するのですか?

取り消す はタスクの実行を取り消します。タスクが revoke されると、ワーカーはそのタスクを無視し、実行しません。persistent revoke を使わなければ、ワーカーの再起動後にタスクが実行される可能性があります。

http://docs.celeryproject.org/en/latest/userguide/workers.html#worker-persistent-revokes

revoke には terminate オプションがあり、これは 偽の になっています。実行中のタスクを終了させる必要がある場合は、terminate を .

>>> from celery.task.control import revoke
>>> revoke(task_id, terminate=True)

http://docs.celeryproject.org/en/latest/userguide/workers.html#revoke-revoking-tasks