2015-11-29 10 views
26

मैं कुछ asyncio फ़ंक्शंस द्वारा थोड़ा उलझन में हूं। मुझे लगता है कि सह-दिनचर्या निर्धारित करने के लिए BaseEventLoop.create_task(coro) फ़ंक्शन है। create_task के लिए प्रलेखन यह एक नया कार्य कहता है और संगतता के लिए हमें asyncio.async(coro) का उपयोग करना चाहिए जो दस्तावेज़ों का दोबारा संदर्भ देकर मुझे लगता है कि asyncio.ensure_future(coro) के लिए उपनाम है जो फिर से सह-दिनचर्या के निष्पादन को शेड्यूल करता है।loop.create_task, asyncio.async/sure_future और कार्य के बीच क्या अंतर है?

इस बीच, मैं सह-नियमित निष्पादन शेड्यूल करने के लिए Task(coro) का उपयोग कर रहा हूं और यह भी ठीक काम कर रहा है। तो, इन सभी के बीच क्या अंतर है?

उत्तर

19

जैसा कि आपने देखा है, वे सभी एक ही काम करते हैं।

asyncio.asyncasyncio.ensure_future साथ प्रतिस्थापित किया जा सकता है क्योंकि पायथन में> = 3.5, async एक कीवर्ड [1] किया गया है था।

create_task की किशमिश [2]:

तृतीय-पक्ष घटना छोरों अंतर के लिए टास्क के अपने स्वयं के उपवर्ग उपयोग कर सकते हैं। इस मामले में, परिणाम प्रकार कार्य का उप-वर्ग है।

और यह भी आप नहीं एक Task सीधे बनाना चाहिए, क्योंकि अलग घटना छोरों एक "टास्क" बनाने के विभिन्न तरीके हो सकता है इसका मतलब है।

संपादित

एक और महत्वपूर्ण अंतर यह है कि स्वीकार करने coroutines के अलावा, ensure_future भी किसी भी awaitable वस्तु को स्वीकार करता है, दूसरी ओर create_task सिर्फ कोरआउट को स्वीकार करता है।

+0

लगता है जैसे मैं बेहतर 'sure_future' का उपयोग करता हूं। इसे साफ़ करने के लिए धन्यवाद। – Elektito

+1

जब तक कि आप पाइथन <3.4.4 के लिए कोड लिख रहे हों, बेशक;) –

+0

आह, हां। मैंने ध्यान नहीं दिया! मैं पाइथन <3.4.4 का उपयोग कर _am_ ऐसा होता है; 3.4.3 सटीक होना चाहिए। – Elektito

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