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ć!
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
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)
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 terminate
jest " 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).
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.
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