Anulować już wykonujące zadanie za pomocą selera?

Czytałem doc i szukałem, ale nie mogę znaleźć prostej odpowiedzi:

Czy można anulować już wykonujące zadanie? (jak w zadaniu się zaczęło, zajmuje trochę czasu i w połowie musi być anulowane)

Znalazłem to w doc w seler FAQ

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

Ale nie jestem pewien, czy spowoduje to Anulowanie zadań w kolejce, czy też zabije uruchomiony proces na workerze. Dzięki za każde światło, które możesz rzucić!

Author: AndreL, 2012-01-19

4 answers

revoke anuluje wykonanie zadania. Jeśli zadanie zostanie odwołane, pracownicy zignorują zadanie i nie wykonają go. Jeśli nie używasz trwałych odwołań, Twoje zadanie może zostać wykonane po ponownym uruchomieniu workera.

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

Revoke ma opcję Zakończ, która domyślnie jest False. Jeśli chcesz zabić wykonujące zadanie, musisz ustawić terminate na True .

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

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

 128
Author: mher,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-23 23:33:10

W seler 3.1, API odwołujących Zadań zostaje zmienione.

Zgodnie z seler FAQ , należy użyć result.revoke:

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

Lub jeśli masz tylko id zadania:

>>> from proj.celery import app
>>> app.control.revoke(task_id)
 28
Author: Rockallite,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-29 03:44:43

@ 0x00mh odpowiedź jest poprawna, jednak ostatnio selery docs mówią, że użycie opcji terminatejest " ostatnią deską ratunku dla administratorów", ponieważ możesz przypadkowo zakończyć inne zadanie, które rozpoczęło wykonywanie w międzyczasie. Prawdopodobnie lepszym rozwiązaniem jest połączenie terminate=True z signal='SIGUSR1' (co powoduje, że wyjątek SoftTimeLimitExceeded zostanie podniesiony w zadaniu).

 13
Author: kouk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-05 10:37:52

Zobacz następujące opcje dla zadań: time_limit, soft_time_limit (lub możesz ustawić go dla workerów). Jeśli chcesz kontrolować nie tylko czas wykonania, zobacz expires argument metody apply_async.

 0
Author: simplylizz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-02 13:05:54