2017-02-14 17 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