Как убить бегущее задание в сельдерее? - PullRequest
0 голосов
/ 25 апреля 2020

Я использую сельдерей в python. У меня есть следующая задача:

@app.task
def data():
    while 1:
        response = requests.get(url, timeout=300).json()
        db.colloectionName.insert_many(response)
        sleep(10000)

Эта задача получает данные с веб-сервера и сохраняет их на MongoDB в al oop. Я назвал его следующим кодом:

data.delay()

он работает нормально. Но я хочу убить это программированием. Я попробовал data.AsyncResult(task_id).revoke(), но это не работает. Как убить бегущее задание в сельдерее?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Вы можете попробовать:

res = data.delay()
res.revoke()

, но я не понимаю смысла использования Celery в вашем сценарии. Как Celery поможет вам, если вы делаете while 1 l oop?

Рассмотрите возможность разбить его на небольшую задачу, которая выполняет один HTTP-запрос, и добавьте удар Celery, чтобы вызывать его каждые 10 секунд. Вы можете остановить удары в любое время.

1 голос
/ 25 апреля 2020

Почему вы делаете data.AsyncResult? Вы можете попробовать сделать что-то вроде этого.

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

Также более подробную информацию можно найти здесь:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...