2013-01-18 36 views
7

अजवाइन दस्तावेज मुझे बताता है कि यदि कई कार्यों को एक साथ बंधे हुए हैं, तो पहले कार्य का परिणाम अगले का पहला तर्क होगा। मेरी समस्या यह है कि, जब मैं एक ऐसा कार्य करता हूं जो कई परिणाम देता है तो मैं इसे काम नहीं कर सकता।सेलेरी: एकाधिक तर्कों के साथ चेनिंग कार्य

उदाहरण:।

@task() 
def get_comments(url): 
    #get the comments and the submission and return them as 2 objects 
    return comments, submission 

@task 
def render_template(threadComments, submission): 
    #render the objects into a html file 
    #does not return anything 

अब, अगर मैं उनकी तरह एक श्रृंखला में फोन (get_comments (यूआरएल) | render_template()) apply_asnc() अजगर एक TypeError: render_template() takes exactly 2 arguments (0 given) फेंक देते हैं।

मैं देख सकता हूं कि परिणाम अनचाहे नहीं हैं और तर्कों पर लागू होते हैं। अगर मैं केवल get_comments को कॉल करता हूं, तो मैं कर सकता हूं:

result = get_comments(url) 
arg1, arg2 = result 

और दोनों परिणाम प्राप्त करें।

+0

"अगले फ़ंक्शन के लिए वापसी स्थितित्मक तर्क" के समाधान में रुचि रखने वाले उपयोगकर्ता मेरे उत्तर में दिलचस्पी ले सकते हैं http://stackoverflow.com/a/15778196/114917 –

उत्तर

20

यहां दो गलतियां हैं।

सबसे पहले, आपको get_comments() और render_template() पर कॉल करने की आवश्यकता नहीं है। इसके बजाय, आपको .s() कार्य विधि का उपयोग करना चाहिए। जैसा:

(get_comments.s(url) | render_template.s()).apply_async() 

आपके मामले में, आप समारोह पहले लॉन्च करते हैं, और फिर एक श्रृंखला के लिए कार्यों के परिणाम में शामिल होने की कोशिश करता है।

दूसरा, वास्तव में, आप अपने पहले कार्य से "दो परिणाम" वापस नहीं लौटते हैं। इसके बजाए, आप एक टुपल लौटते हैं, जिसमें दोनों परिणाम होते हैं, और यह ट्यूपल दूसरे कार्य को एकल ऑब्जेक्ट के रूप में पास कर दिया जाता है।

इसलिए, आप के रूप में

@task 
def render_template(comments_and_submission): 
    comments, submission = comments_and_submission 

आप इन को ठीक है, यह काम करना चाहिए अपने दूसरे काम को फिर से लिखने चाहिए।

+0

इस निश्चित खान को भी ठीक करें। – ashim888

+0

क्या यह एकमात्र तरीका है? क्या स्टार-बहस के साथ इसे लागू करने के लिए कोई संभव है? – FavorMylikes