使用相同的args/kwargs撤消芹菜任务

2024-04-24 11:09:01 发布

您现在位置:Python中文网/ 问答频道 /正文

想象一下,有一个长时间运行的任务具有一组特定的arg和kwarg。在开始一个新任务之前,是否有机会撤消所有正在运行和挂起的具有相同args/kwargs的任务,因为Im只对最后添加的任务的结果感兴趣。(两个调用之间的基础数据更改)

我尝试迭代inspect.active()inspect.registered()和{}的结果来获得所有任务,然后{}那些有我的参数和kwarg的任务。在

但这并不可靠,因为检查所有工人和寻找任务的时间太长。在

谁能帮我找到正确的方向?在


Tags: 数据参数argargs基础感兴趣kwargs机会
1条回答
网友
1楼 · 发布于 2024-04-24 11:09:01

如果检查工作线程的速度很慢,那么最好通过辅助数据存储进行检查,例如像redis这样的键值存储。你为一个函数添加了一个“锁”,所以你知道你已经启动了它。在

将任务排队时:

  • 检查你的商店是否已经存在
    • 是:引发异常
    • 否:将相关任务信息作为物品添加到你的商店。在
  • 将任务添加到芹菜任务队列

一个工人会执行它

  • 执行它
  • 从存储器中取出

有一个基于redis的现成实现:

^{}permalink to current commit)。在

必须将其指定为任务的base

from celery import Celery
from celery_once import QueueOnce

@celery.task(base=QueueOnce)
def sum(a, b):
    ...

您还可以指定要考虑的参数和其他一些设置,请阅读自述文件以了解更多详细信息。在

相关问题 更多 >