पायथन में अतुल्यकालिक प्रोग्रामिंग

Mar 06 2023
एसिंक्रोनस प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जो कई प्रक्रियाओं को समवर्ती और स्वतंत्र रूप से निष्पादित करने की अनुमति देता है, बिना आगे बढ़ने से पहले एक के समाप्त होने की प्रतीक्षा किए बिना। इस ब्लॉग पोस्ट में हम देखेंगे कि अतुल्यकालिक प्रोग्रामिंग क्या है और इसे पायथन में कैसे उपयोग किया जाए।
पायथन में अतुल्यकालिक प्रोग्रामिंग

एसिंक्रोनस प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जो कई प्रक्रियाओं को समवर्ती और स्वतंत्र रूप से निष्पादित करने की अनुमति देता है, बिना आगे बढ़ने से पहले एक के समाप्त होने की प्रतीक्षा किए बिना। इस ब्लॉग पोस्ट में हम देखेंगे कि अतुल्यकालिक प्रोग्रामिंग क्या है और इसे पायथन में कैसे उपयोग किया जाए।

अतुल्यकालिक प्रोग्रामिंग क्या है?

सिंक्रोनस प्रोग्रामिंग में, कंप्यूटर अनुक्रमिक क्रम में निर्देशों को निष्पादित करता है, निष्पादन को तब तक रोकता है जब तक कि अगले पर जाने से पहले कार्य पूरा नहीं हो जाता।
दूसरी ओर, अतुल्यकालिक प्रोग्रामिंग प्रोग्राम को एक ऑपरेशन शुरू करने की अनुमति देता है और फिर मूल कार्य पूरा होने तक निष्पादन को रोके बिना दूसरे पर जाता है।

एसिंक्रोनस प्रोग्रामिंग विशेष रूप से उन परिस्थितियों में फायदेमंद होती है जहां प्रक्रियाएं, जैसे कि नेटवर्क I/O या डेटाबेस संचालन, को पूरा होने में लंबा समय लग सकता है। एसिंक्रोनस प्रोग्रामिंग सॉफ्टवेयर अनुप्रयोगों में प्रदर्शन और जवाबदेही को बढ़ाने में मदद कर सकती है, जिससे प्रोग्राम को अन्य गतिविधियों पर जाने की अनुमति मिलती है, जबकि धीमे ऑपरेशन के पूरा होने की प्रतीक्षा की जाती है।

उपयोग की गई प्रोग्रामिंग भाषा और ढांचे के आधार पर, एसिंक्रोनस प्रोग्रामिंग को विभिन्न रणनीतियों जैसे कॉलबैक, वादे, या async/प्रतीक्षा कीवर्ड का उपयोग करके पूरा किया जा सकता है।

अतुल्यकालिक प्रोग्रामिंग और मल्टीप्रोसेसिंग के बीच अंतर

एसिंक्रोनस प्रोग्रामिंग और मल्टीप्रोसेसिंग के बीच मुख्य अंतर यह है कि एसिंक्रोनस प्रोग्रामिंग नॉन-ब्लॉकिंग ऑपरेशंस को एक थ्रेड के भीतर होने की अनुमति देता है, जबकि मल्टीप्रोसेसिंग एक साथ काम पूरा करने के लिए कई कोर या प्रक्रियाओं का उपयोग करता है ।

अतुल्यकालिक प्रोग्रामिंग और थ्रेडिंग के बीच अंतर

अतुल्यकालिक प्रोग्रामिंग और थ्रेडिंग के बीच मुख्य अंतर यह है कि अतुल्यकालिक प्रोग्रामिंग एकल थ्रेड का उपयोग करके गैर-अवरुद्ध संचालन की अनुमति देता है, जबकि थ्रेडिंग समानांतर में कई कार्यों को करने के लिए कई थ्रेड्स का उपयोग करता है ।

मतभेदों के बारे में अधिक जानकारी के लिए: ट्रेडिंग बनाम मल्टीप्रोसेसिंग बनाम एसिंक्रोनस प्रोग्रामिंग

एसिंक्सियो का उपयोग कैसे करें?

पहले एक सरल प्रोग्राम बनाते हैं जो एक समय में एक काम करना शुरू करता है और उन्हें पूरा करता है।

import time
import asyncio

def do_job(s):
    print(f"{s} started")
    await asyncio.sleep(1)
    print(f"{s} done")

def main():
    start = time.perf_counter()
    todo = ["Job A", "Job B", "Job C"]
    for job in todo:
        do_job(job)
    
    end = time.perf_counter()
    print(f"Took: {end-start:.3f} seconds")

main()

# OUTPUT
# Job A started
# Job Adone
# Job B started
# Job B done
# Job C started
# Job C done
# Took: 3.009 seconds

कोरूटीन बनाना और चलाना

एक कोरटाइन एक प्रकार का कार्य है जिसे निष्पादन के दौरान कई बार बाधित और फिर से शुरू किया जा सकता है। दूसरे शब्दों में, एक कोरआउटिन आपको कोड लिखने की अनुमति देता है जिसे बाधित किया जा सकता है, कुछ और करें, और फिर इसे फिर से शुरू करें जहां इसे छोड़ा गया था।

Coroutines बनाने के लिए , हमें कीवर्ड asyncसे पहले कीवर्ड का उपयोग करना होगा। Coroutine कोdef कॉल करने से वह फ़ंक्शन कॉल नहीं होता है जिसे हम चलाना चाहते हैं। यह एक कार्य बनाता है।

import time
import asyncio

async def do_job(s):
  ...

async def main():
  ...

main()

asyncio.run(main())

यदि आप इस कोड को चलाते हैं तो आपको शायद कुछ इस तरह की त्रुटि मिलती है:

RuntimeWarning: coroutine '...' was never awaited

import time
import asyncio

async def do_job(s):
    print(f"{s} started")
    await asyncio.sleep(1)
    print(f"{s} done")

async def main():
    start = time.perf_counter()
    todo = ["Job A", "Job B", "Job C"]
    for job in todo:
        await do_job(job)
    
    end = time.perf_counter()
    print(f"Took: {end-start:.3f} seconds")

asyncio.run(main())

# OUTPUT
# Job A started
# Job A done
# Job B started
# Job B done
# Job C started
# Job C done
# Took: 3.009 seconds

await asyncio.sleep(1)

tasks = [asyncio.create_task(do_job(item)) for item in todo]
done, pending = await asyncio.wait(tasks)

import time
import asyncio

async def do_job(s):
    print(f"{s} started")
    await asyncio.sleep(1)
    print(f"{s} done")

async def main():
    start = time.perf_counter()
    todo = ["Job A", "Job B", "Job C"]
    
    tasks = [asyncio.create_task(do_job(item)) for item in todo]
    done, pending = await asyncio.wait(tasks)
    
    end = time.perf_counter()
    print(f"Took: {end-start:.3f} seconds")

asyncio.run(main())

# OUTPUT
# Job A started
# Job B started
# Job C started
# Job A done
# Job B done
# Job C done
# Took: 1.009 seconds

अजगर में अतुल्यकालिक प्रोग्रामिंग के बारे में अधिक जानकारी प्राप्त करने के लिए आप वीडियो देख सकते हैं। ( Async Python का परिचय | वेब क्रॉलर लिखना )