【问题标题】:Can you get a celery task's id from a signature?您可以从签名中获取 celery 任务的 id 吗?
【发布时间】:2022-10-13 15:37:12
【问题描述】:

我必须执行检查以查看我的 celery 任务是否已经创建,这就是为什么我每次调用 .delay() 或 apply_async() 时都尝试检查 rabbitmq 队列并查找任务 ID。问题是在我的代码中传递了很多签名,我不知道如何从签名中获取任务 ID。根据文档,签名对象的内容如下所示:

{'task': 'tasks.add', args=(2, 2), kwargs={}, options={}}

(https://docs.celeryproject.org/en/stable/reference/celery.html)

但是这里的任务只是一个字符串,我不确定是否已经分配了 id。这就是我想在我的代码中做的事情:

some_task_signature= task.s(parameters)
    task_id = some_task_signature.task_id # I'm not sure if this is actually in the signature
    if not is_task_active_or_registered(app, task_id)
    some_task_signature.delay()

我正在使用部署在 Windows 10 虚拟机上的 celery 版本 3.1.25 和 python 3.6。

任何帮助将非常感激。

【问题讨论】:

  • 你想通了吗?还在寻找如何从通过签名创建的任务中收集任务 ID,但在我能找到的文档中没有提及。

标签: celery task python-3.6


【解决方案1】:

你可以设置自己的id。

task_id = uuid4()
some_task_signature = task.s(parameters).set(task_id=str(task_id))
some_task_signature.delay()
AsyncResult(task_id) # get task info later

这里有更多信息:https://github.com/celery/celery/issues/1813

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多