2012-12-18 28 views
5

अंदर समूह मैं की तरह, एक श्रृंखला के अंदर एक समूह (या मात्रा) का उपयोग करना चाहते:अजवाइन एक श्रृंखला

chain(getRange.s(3), GROUP() , xsum.s()) 

कहाँ GROUP()double() कार्यों के एक समूह है, यानी group(double(0),double(1),double(2)) है। एक समान प्रश्न How to chain a Celery task that returns a list into a group? में पोस्ट किया गया था लेकिन यह समझाया नहीं गया है कि समूह से आउटपुट को श्रृंखला में अगले कार्य में कैसे पास किया जाए।

@task 
def getRange(x): 
    return range(x) 

@task 
def double(nr): 
    return nr*2 

@task 
def xsum(list): 
    return sum(list) 

उत्तर

5

मुझे विश्वास नहीं है कि एक ही श्रृंखला में मौजूदा प्राइमेटिव के साथ ऐसा करने का एक तरीका है। आपके द्वारा उल्लिखित प्रश्न में कॉलबैक पास करने से समूह कार्य समाप्त होने पर आपको सुनने की अनुमति नहीं मिलती है।

@task 
def get_range(x): 
    return range(x) 

@task 
def mapper(nr): 
    return nr * 2 

@task 
def reducer(nrs): 
    return sum(nrs) 

@task 
def double_then_sum(nrs): 
    return (
    group([mapper.s(nr) for nr in nrs]) | 
    reducer.s() 
)() 

ar = (get_range.s(3) | double_then_sum.s())() # call the procedure 
ar.result.result # get the result 

नहीं तो आप dynamic chaining है, जो एक सरल समाधान करने के लिए नेतृत्व करेंगे, या बस map उपयोग करें यदि आप समानांतर में चलाने के लिए अपने वर्गीकृत किया कार्यों की जरूरत नहीं है का उपयोग कर की कोशिश कर सकते: निकटतम आप प्राप्त कर सकते हैं की तरह कुछ है।

संबंधित मुद्दे