当前位置: 首页 > 面试题库 >

取消Celery已经执行的任务?

赵永逸
2023-03-14
问题内容

我一直在阅读文档并进行搜索,但似乎找不到直接的答案:

你可以取消已经执行的任务吗?(由于任务已开始,需要一段时间,因此需要取消一半)

我是从Celery FAQ的文档中找到的

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

但是我不清楚这是否会取消排队的任务,或者是否会杀死工作程序上正在运行的进程。感谢你能摆脱的光芒!


问题答案:

撤销将取消任务执行。如果任务被吊销,工人将忽略该任务并且不执行它。如果你不使用持久撤销,则可以在worker重新启动后执行你的任务。

html" target="_blank">http://docs.celeryproject.org/en/latest/userguide/workers.html#worker-persistent-revokes

revoke具有终止选项,默认情况下为False。如果你需要终止正在执行的任务,则需要将Terminate设置为True。

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


 类似资料:
  • 问题内容: 我将Redis作为经纪人使用Celery(3.0.15)。 有没有一种简单的方法来查询Celery队列中存在的具有给定名称的任务数? 并且,作为后续措施,是否可以取消Celery队列中存在的所有具有给定名称的任务? 我已经看过《监控和管理指南》,在那儿看不到解决方案。 问题答案:

  • 问题内容: 如何从任务中获取任务的task_id值?这是我的代码: 这个想法是,当我创建任务的新实例时,我从任务对象中检索。然后,我使用任务ID来确定任务是否已完成。我 不想 按值跟踪任务,因为在任务完成后文件将被“清理”,并且可能存在也可能不存在。 在上面的示例中,我将如何获取值? 问题答案: 如果任务接受,Celery会设置一些默认关键字参数。(您可以使用** kwargs接受它们,也可以专门

  • 问题内容: 我有一个python celery-redis队列处理一次上传和下载值得一次演出和大量演出的数据。 很少有上传内容需要花费几个小时的时间。但是,一旦完成了这样的任务,我就目睹了这种奇怪的芹菜行为:芹菜调度程序通过将其再次发送给工作人员来重新运行刚刚完成的任务(我正在运行一个工作人员),并且它在同一时间发生了2次任务! 有人可以帮助我知道为什么会发生这种情况以及如何预防吗? 这些任务肯定

  • 问题内容: 我刚刚发现了有关配置选项(docs)的信息。默认值为4,但是(我相信)我希望预取尽可能少。我现在将其设置为1,这与我要查找的值足够接近,但是仍有一些我不理解的地方: 为什么这样预取一个好主意?我并没有真正找到原因,除非消息队列和工作线程之间存在大量延迟(就我而言,它们当前正在同一主机上运行,​​最糟糕的是最终可能在同一数据中的不同主机上运行)中央)。该文档仅提到了缺点,但没有解释优点是

  • 问题内容: 我目前正在将celery与django结合使用,并且一切正常。 但是,如果服务器超载,我希望能够通过检查当前计划了多少个任务,使用户有机会取消任务。 我怎样才能做到这一点? 我正在使用Redis作为代理。 这在某种程度上与我的问题有关,但是我不需要列出任务,只需数一下它们即可:) 问题答案: 如果您的代理配置为,并且您的任务已提交到常规队列,则可以通过以下方式获得长度: 或者,从she

  • 一个OBLOQ最多同时订阅5个topic,可以对已经订阅的topic进行取消订阅。 请求方式: "|4|1|6|topic|\r" 参数: topic 取消订阅的topic,获取设备topic可参考教程 返回值: "|4|1|6|1|\r" 取消订阅成功 "|4|1|6|2|2|\r"取消订阅失败 "|4|1|6|2|1|\r" topic不存在,取消订阅失败 Arduino样例: softSer