async এবং await ব্যবহারের মাধ্যমে কোডের কার্যকারিতা ও দ্রুততা বৃদ্ধি পাওয়ার কিছু বাস্তব উদাহরণ নিয়ে আলোচনা করা যাক। এই প্রযুক্তিগুলি বিশেষ করে আই/ও ভিত্তিক কাজগুলো যেমন HTTP রিকোয়েস্ট, ফাইল সিস্টেম অপারেশন, ডাটাবেস কল ইত্যাদির ক্ষেত্রে খুবই কার্যকর।
বাস্তব উদাহরণ: HTTP রিকোয়েস্ট এবং ডেটা ফেচ
ধরুন, আমাদের একটি অ্যাপ্লিকেশন আছে যা তিনটি ভিন্ন API থেকে ডেটা ফেচ করছে। যদি আমরা সাধারণ (সিনক্রোনাস) কোড ব্যবহার করি, তাহলে আমাদের এক API থেকে ডেটা আসা পর্যন্ত পরবর্তী API কল করতে পারব না। এটি আমাদের অ্যাপ্লিকেশনের কার্যকারিতাকে ধীর করে দিতে পারে।
সিনক্রোনাস কোড
import requests
import time
def fetch_data(url):
print(f"{url} থেকে ডেটা ফেচ করা হচ্ছে...")
response = requests.get(url)
return response.json()
def main():
urls = [
'https://jsonplaceholder.typicode.com/posts',
'https://jsonplaceholder.typicode.com/users',
'https://jsonplaceholder.typicode.com/comments'
]
results = []
for url in urls:
result = fetch_data(url) # এখানে প্রতিটি URL থেকে ডেটা ফেচ হতে হবে একে একে
results.append(result)
for i, result in enumerate(results):
print(f"URL {i + 1} এর ফলাফল:")
print(result[:2]) # প্রথম দুটি আইটেম প্রদর্শন করছি
if __name__ == "__main__":
start_time = time.time()
main() # সিনক্রোনাস ফাংশন চালানো
print(f"সময় লাগল: {time.time() - start_time} সেকেন্ড")
এই কোডের সমস্যা:
- এখানে প্রতিটি API কলের জন্য অপেক্ষা করতে হচ্ছে। যদি প্রথম API থেকে ডেটা আসতে 2 সেকেন্ড সময় লাগে, তাহলে পরবর্তী API কল শুরু করতে 2 সেকেন্ড অপেক্ষা করতে হবে।
- সুতরাং, মোট সময় হবে 6 সেকেন্ড (যদি প্রতিটি API কল 2 সেকেন্ড সময় নেয়)।
আসিনক্রোনাস কোড
এখন আসুন async এবং await ব্যবহার করে কোডটি পুনরায় লেখি।
import httpx
import asyncio
import time
async def fetch_data(url):
print(f"{url} থেকে ডেটা ফেচ করা হচ্ছে...")
async with httpx.AsyncClient() as client:
response = await client.get(url) # এখানে GET রিকোয়েস্টের জন্য অপেক্ষা করা হচ্ছে
return response.json()
async def main():
urls = [
'https://jsonplaceholder.typicode.com/posts',
'https://jsonplaceholder.typicode.com/users',
'https://jsonplaceholder.typicode.com/comments'
]
tasks = [fetch_data(url) for url in urls] # সব টাস্ক একত্রিত করা
results = await asyncio.gather(*tasks) # সব টাস্ক একসাথে রান করা
for i, result in enumerate(results):
print(f"URL {i + 1} এর ফলাফল:")
print(result[:2]) # প্রথম দুটি আইটেম প্রদর্শন করছি
if __name__ == "__main__":
start_time = time.time()
asyncio.run(main()) # আসিনক্রোনাস ফাংশন চালানো
print(f"সময় লাগল: {time.time() - start_time} সেকেন্ড")
এই কোডের সুবিধা:
- এখানে আমরা
asyncio.gatherব্যবহার করে সমস্ত API কলকে একসাথে পাঠাতে পারছি। ফলে, সবগুলো API কল একই সময়ে চলছে। - যদি প্রতিটি API কল 2 সেকেন্ড সময় নেয়, তাহলে সবগুলো একসাথে চলে, এবং মোট সময় হবে মাত্র 2 সেকেন্ড।
উপকারিতা
- দ্রুত কার্যকারিতা:
asyncএবংawaitব্যবহার করে, আপনার অ্যাপ্লিকেশন একসাথে একাধিক কাজ করতে পারে, যার ফলে আপনার অ্যাপ্লিকেশন দ্রুত সাড়া দেয়। - রিসোর্স ব্যবহারের দক্ষতা: এই প্রযুক্তিগুলি CPU কে অব্যবহৃত রেখে নেটওয়ার্কের অপেক্ষা সময় কমাতে সহায়তা করে।
- সহজ এবং পরিষ্কার কোড:
asyncএবংawaitব্যবহার করলে কোডটি আরও পরিষ্কার এবং বোঝার জন্য সহজ হয়। সুতরাং, ডেভেলপমেন্ট এবং ডিবাগিং আরও সহজ হয়।