Python 使用关键字参数调用任务块

Python 使用关键字参数调用任务块,python,celery,celery-task,keyword-argument,celery-canvas,Python,Celery,Celery Task,Keyword Argument,Celery Canvas,如何使用关键字参数分块任务?例如,此任务: @app.task def add(x, y, multiply=1, unit="GB"): return '%s %s' % ((x + y) * multiply, unit) 我可以像往常一样使用add.apply_async(args=(1,2),kwargs={'unit':'MB'})调用此任务但是如何将其分块 我想做一些类似的事情: add.chunks([{'args': (1, 2), 'kwargs': {'unit':

如何使用关键字参数分块任务?例如,此任务:

@app.task
def add(x, y, multiply=1, unit="GB"):
    return '%s %s' % ((x + y) * multiply, unit)
我可以像往常一样使用
add.apply_async(args=(1,2),kwargs={'unit':'MB'})调用此任务
但是如何将其分块

我想做一些类似的事情:

add.chunks([{'args': (1, 2), 'kwargs': {'unit': 'MB'}}, {'args': (3, 4), 'kwargs': {'unit': 'KB'}}, ...], 10)
仅显示了如何使用带位置参数的块:

from proj.tasks import add
res = add.chunks(zip(range(100), range(100)), 10)()
从我在你身上看到的,你必须给出一组参数

因此,您可以制作此类帮助器:

def build_kwargs_tuples(params, default_multiply=1, default_unit="GB"):
    for d in params:
        x,y = d["args"]
        kwargs = d.get("kwargs",{})
        multiply = kwargs.get("multiply", default_multiply)
        unit = kwargs.get("unit", default_unit)
        yield (x,y,multiply, unit)
然后,您可以按要求的方式指定参数:

In [40]: example = [{'args': (1, 2), "kwargs": {'unit': 'MB'}}, {'args': (3, 4), "kwargs": {'unit': 'KB'}}]

In [41]: res = add.chunks(build_kwargs_tuples(example),1)()

In [43]: res.get()
Out[43]: [[u'3 MB'], [u'7 KB']]

这只使用位置参数,而不是关键字参数在“我的任务”的定义中,只有关键字参数(就像在您的任务中一样)。只有当我调用任务时,我才使用他们的位置。也许我不明白您想要实现什么,在这种情况下,请发布一段代码和所需的行为。您希望如何将任务分块?你的论点应该如何变化?我的意思是你想用
x在范围(100)
y在范围(100)
和固定的
unit=“GB”
?我想做一些类似于
add.chunks([{'args':(1,2),kwargs:{'unit':'MB'},{'args':(3,4),kwargs:{'unit':'KB},…)的事情,