我在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()
但它不起作用。
如何杀死芹菜中正在运行的任务?
答案 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)