如何杀死芹菜中正在运行的任务?

时间:2020-04-25 12:53:57

标签: python task celery

我在python中使用Celery。我有以下任务:

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

此任务从Web服务器获取数据并将其循环保存在MongoDB中。 我通过以下代码对其进行了调用:

data.delay()

工作正常。但是,我想通过编程杀死它。我尝试过data.AsyncResult(task_id).revoke() 但它不起作用。 如何杀死芹菜中正在运行的任务?

3 个答案:

答案 0 :(得分:2)

为什么要执行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

答案 1 :(得分:1)

您可以尝试:

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

但是我不明白在您的场景中使用Celery的意义。如果您正在执行while 1循环,Celery如何为您提供帮助?

考虑将其分解为一个执行单个HTTP请求的小任务,并添加Celery beat每10秒调用一次。 您可以随时停止节拍。

答案 2 :(得分:1)

您可以使用以下代码:

revoke(task_Id, terminate=True)
相关问题