定义多个任务时,如何获取某个Celery任务类型的任务状态和结果?

How to Get the Task Status and Result of a Celery Task Type When Multiple Tasks Are Defined?

通常我发送一个异步任务,其中定义了 Promise 的 .apply_async 方法,然后我使用同一对象的 AsyncResult 方法上的 taskid 来获取任务状态,并最终得到结果.

但是当在同一个部署中定义了多个任务时,这需要我知道任务的确切类型。当我不知道确切的任务就可以知道任务状态和结果(如果可用)时,有什么办法可以避免这种情况?

例如以本例celery主节点代码为例

#!/usr/bin/env python3
# encoding:utf-8

"""Define the tasks in this file."""
from celery import Celery

redis_host: str = 'redis://localhost:6379/0'

celery = Celery(main='test', broker=redis_host,
                backend=redis_host)


celery.conf.CELERY_TASK_SERIALIZER = 'pickle'
celery.conf.CELERY_RESULT_SERIALIZER = 'pickle'
celery.conf.CELERY_ACCEPT_CONTENT = {'json', 'pickle'}

# pylint: disable=unused-argument


@celery.task(bind=True)
def add(self, x: float, y: float) -> float:
    """Add two numbers."""
    return x + y


@celery.task(bind=True)
def multiply(self, x: float, y: float) -> float:
    """Multiply two numbers."""
    return x * y

当我在不同的模块中调用类似的东西时

task1=add.apply_async(args=[2, 3]).id
task2=multiply.apply_async(args=[2, 3]).id

我得到了两个任务的 uuid。但是在查看任务状态时,我需要知道哪个方法(加法或乘法)与该任务 ID 相关联,因为我必须在相应的对象上调用该方法,就像这样。

status: str = add.AsyncResult(task_id=task1).state

我的问题是如何在不知道任务属于 addmultiply 或定义的任何其他类别的情况下仅使用任务 ID 获取状态和结果。

idstate 只是 AsyncResult 对象的属性。如果您查看 AsyncResult class 的文档,您会发现 name 属性 这正是您所要求的。