2015-08-09 9 views
11

कोई भी पाइथन एसिन्सियो मॉड्यूल के कार्य और कोरआउट के बीच चयन करने के तरीके पर व्यावहारिक सलाह प्रदान कर सकता है?कोरआउट के बजाए एक कार्य का उपयोग कब किया जाना चाहिए?

अगर मैं अतुल्यकालिक रूप से कुछ प्राप्त करने के लिए थे, मैं नीचे 2 में से किसी कर सकता है -

import asyncio 

@asyncio.coroutine 
def print_hello(): 
    print('Hello') 

loop = asycio.get_event_loop() 
loop.run_until_complete(print_hello) 
loop.close() 

या

import asyncio 

@asyncio.coroutine 
def print_hello(): 
    print('Hello') 

print_task = asyncio.ensure_future(print_hello) 

loop = asycio.get_event_loop() 
loop.run_until_complete(asyncio.wait_for(print_task)) 
loop.close() 

किन कारणों से तय है जो 2 तरीकों में से ऊपर का चयन करने के?

+3

(कृपया टिप्पणी में चीजों का जवाब नहीं है) आम तौर पर आप एक coroutine का प्रयोग करेंगे जब आप इसे सीधे जोड़ी से उपज का उपयोग कर बुला माता पिता coroutine करना चाहते हैं। यह युग्मन बच्चा कोरोटाइन चलाता है और माता-पिता कोरोटाइन को जारी रखने से पहले बच्चे कोरोटाइन लौटने की प्रतीक्षा करता है। दूसरी ओर, एक कार्य, माता-पिता कोरोटाइन द्वारा संचालित नहीं किया जाना चाहिए क्योंकि यह स्वयं ड्राइव कर सकता है। – shongololo

+0

क्या [यह प्रश्न] (http://stackoverflow.com/q/27076577/2073595) आपके प्रश्न का संतोषजनक तरीके से जवाब देता है? मैं इसे एक डुप्ली के रूप में चिह्नित करने के लिए प्रेरित हूं, लेकिन अगर आप अतिरिक्त जानकारी की तलाश में हैं तो मुझे बताएं। – dano

+1

इसके अलावा, 'loop.run_until_complete (coro) 'हमेशा' coro' को' कार्य 'में आंतरिक रूप से परिवर्तित करता है; कार्यक्रम चलाने के लिए आपको कम से कम एक 'कार्य' की आवश्यकता है। – dano

उत्तर

1

"आम तौर पर आप एक कोरआउटिन का उपयोग करेंगे जब आप सीधे उपज का उपयोग करके कॉलिंग पेरेंट कोरआउटिन को जोड़ना चाहते हैं। यह युग्मन बच्चे को कोरआउटिन को चलाता है और माता-पिता कोरोटाइन को पहले से वापस करने के लिए बच्चे कोरोटाइन की प्रतीक्षा करता है दूसरी ओर, एक कार्य, माता-पिता कोरोटाइन द्वारा संचालित नहीं किया जाना चाहिए क्योंकि यह स्वयं ड्राइव कर सकता है। " - shongololo

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