- Asyncio, Python में I/O-bound प्रोग्राम संभालने का एक अच्छा तरीका है और मूल रूप से Python Generator के ऊपर एक अच्छा layer देता है
- Generator कोड को memory-efficient बनाते हैं, और
yield keyword का उपयोग करके function को अस्थायी रूप से रोककर फिर से शुरू किया जा सकता है
yield from का उपयोग करने पर generator, sub-generator या iterable object को कॉल कर सकता है, जिससे generator chain बनाई जा सकती है
इवेंट लूप
- Asyncio का core, वर्तमान task को चलाने और manage करने वाला event loop है
- Event loop, task की सूची पर बार-बार iterate करते हुए
next(task) से हर task को चलाता है
- Task, I/O काम के दौरान
yield का उपयोग करके execution को रोकता है और control को event loop को वापस दे देता है
स्लीपिंग
yield from का उपयोग करके task में sub-generator जोड़ा जा सकता है
- Sleep generator जोड़ने पर तय समय तक task का execution रोका जा सकता है
- जब Sleep,
while loop से बाहर निकलता है, तो StopIteration exception होता है और task function का yield from अगली code line से आगे बढ़ता है
Yield से Await तक
__await__ dunder method और async keyword का उपयोग करके yield से await में बदला जा सकता है
await keyword, class instance के __await__ method को कॉल कर सकता है या coroutine (async function से बना object) में इस्तेमाल किया जा सकता है
await keyword को yield from का synonym माना जा सकता है, हालांकि इसमें कुछ अतिरिक्त validity check rules होते हैं
- अपना
Task class बनाकर __await__ method implement किया जा सकता है, और create_task function से बनाए गए task को event loop में जोड़ा जाता है
- Event loop manager task को चलाता है, और
StopIteration exception होने पर task को पूरा मानकर process करता है
- Sleep function को भी async-compatible बनाने के लिए modify करना पड़ता है
AsyncIO और Await
- ऊपर के code में "jacobio" को "asyncio" से बदलने पर asyncio package का पूरा उपयोग होने लगता है
- Asyncio और भी बहुत कुछ करता है, लेकिन basic generator से asyncio के core हिस्सों को शुरुआत से फिर से बनाया जा सकता है
- वास्तविक asyncio package में
asyncio.gather() जैसे functions का उपयोग करके कई task संभाले जा सकते हैं
GN⁺ की राय
- यह लेख generator का उपयोग करके asyncio के काम करने के तरीके को आसान भाषा में समझाता है, इसलिए asyncio से पहली बार परिचित होने वाले developers के लिए यह बहुत मददगार लग सकता है
- Asyncio, high-performance I/O processing के लिए optimized library है, और इस लेख के जरिए इसकी internal structure समझने पर इसे वास्तविक project में अधिक प्रभावी ढंग से इस्तेमाल किया जा सकता है
- हालांकि वास्तविक asyncio की संरचना इससे कहीं अधिक जटिल है, इसलिए practical use के लिए official documentation आदि के माध्यम से और गहराई से सीखने की जरूरत होगी
- Asyncio जैसी सुविधाएं देने वाली दूसरी libraries में Trio, Curio आदि शामिल हैं, और इनके अंतर की तुलना करना भी दिलचस्प हो सकता है
- Asyncio अपनाते समय मौजूदा synchronous code के साथ compatibility, error handling, testing जैसी कई बातों पर ध्यान देना पड़ता है, इसलिए पर्याप्त समीक्षा और तैयारी जरूरी होगी
अभी कोई टिप्पणी नहीं है.