मैं asyncio
के लिए पायथन दस्तावेज़ के माध्यम से जा रहा था और मुझे आश्चर्य है कि Asyncio.ensure_future()
के विपरीत अधिकांश उदाहरण loop.run_until_complete()
का उपयोग क्यों करते हैं।अधिकांश asyncio उदाहरण loop.run_until_complete() का उपयोग क्यों करते हैं?
उदाहरण के लिए: https://docs.python.org/dev/library/asyncio-task.html
ऐसा लगता है ensure_future
गैर अवरुद्ध कार्यों के फायदे प्रदर्शित करने के लिए एक बेहतर तरीका होगा। दूसरी तरफ run_until_complete
, लूप को सिंक्रोनस फ़ंक्शंस जैसे ब्लॉक करता है।
इससे मुझे लगता है कि मुझे ensure_future
के के संयोजन के बजाय loop.run_forever()
के साथ कई सह-रूटीन चलाने के लिए उपयोग करना चाहिए।
'run_until_complete' कुछ भी अवरुद्ध नहीं करता है। इसके बीच और 'run_forever' के बीच का अंतर यह है कि लूप को कोरआउटिन के पूरा होने पर रोक दिया जाता है। एकमात्र समय यह अवरुद्ध होगा यदि आपका कोरआउट कभी इंतजार नहीं कर रहा है। – dirn
मैंने यह http://pastebin.com/Qi8dQ3bh लिखा है और ऐसा लगता है कि यह लूप को अवरुद्ध करता है। 'do_other_things()' निष्पादित नहीं होता है जब तक 'do_io() 'पूरा नहीं होता है, भले ही' do_io() 'नींद का इंतजार कर रहा हो। – SamuelN
ऐसा इसलिए है क्योंकि लूप के साथ कुछ और निर्धारित नहीं किया गया है। 'Run_forever' को कॉल करने से पहले 'loop.create_task (do_other_things())' को कॉल करने का प्रयास करें। – dirn