如何使用关键字参数块化任务?例如,这个任务:
@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)
documentation仅显示如何使用具有位置参数的块:
from proj.tasks import add
res = add.chunks(zip(range(100), range(100)), 10)()
答案 0 :(得分:1)
从我在chunks
source code中看到的,你必须给出一个可迭代的参数元组。
所以你可以成为这样的帮手:
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']]