正确执行芹菜任务的类型注释

时间:2020-09-02 22:16:15

标签: python celery type-hinting

我正在寻找可归因于芹菜@task装饰员设置的芹菜任务的正确类型注释。

假设我有一个函数run_task,可以执行一些芹菜任务。

@task(name='adder')
def add(x, y):
    return x + y


def run_task(taskfn: "?", *a, **kw):
    # do something here
    taskfn.apply_async(args=a, kwargs=kw)
    ...


>>> run_task(add, 1, 2)  # usage

我的困惑在这里:

>>> from celery.task import Task
>>> from celery.local import PromiseProxy
>>> type(add).__name__
'PromiseProxy'
>>> isinstance(add, Task)
False
>>> isinstance(add, PromiseProxy)
True

PromiseProxy似乎是某种保存任务的“未来”或“承诺”代理(或类似的I haven't looked too far into it)。

这不是问题,我可以轻松完成taskfn: PromiseProxy,但是taskfn.apply_async毫无意义,因为apply_async上没有方法PromiseProxy 。因此,我的问题是,我应该做type告诉我的事情,还是应该按照鸭子的风格思考并选择Task

0 个答案:

没有答案