2017-02-14 19 views
1

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

@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)() 

回答

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']] 
+0

这仅使用位置参数,而不是关键字参数 –

+0

在定义我的任务,只有关键字参数(如在你的)。只有当我把这个任务称为我使用他们的位置时。也许我不明白你想达到什么目的,在这种情况下,请发布一段代码和期望的行为 – arthur

+0

你想如何分块的任务?你的论点应该如何变化?我的意思是你是否想用'x在范围内(100)''y在范围内(100)'并且固定'unit =“GB”'来应用这个任务? – arthur