
পাইথনেরasyncioমডিউল async/await সিনট্যাক্স ব্যবহার করে সমসাময়িক কোড লিখতে সক্ষম করে। 2026 সালে, asyncio শক্তি FastAPI, Starlette, এবং aiohttp। এই নির্দেশিকাটি ইভেন্ট লুপ থেকে বাস্তব-বিশ্বের নিদর্শন পর্যন্ত সবকিছু কভার করে।
📋 Table of Contents
asyncio কি?
অ্যাসিঙ্কিও সমসাময়িক কাজগুলি পরিচালনা করতে একটি একক-থ্রেডেড ইভেন্ট লুপ ব্যবহার করে — নেটওয়ার্ক I/O এবং APIগুলির জন্য উপযুক্ত যেখানে আপনি কম্পিউটিং নয়, অপেক্ষায় বেশিরভাগ সময় ব্যয় করেন।
import asyncio
async def main():
print('Hello asyncio!')
await asyncio.sleep(1)
print('Done!')
asyncio.run(main())
async/await সিনট্যাক্স
ব্যবহার করুনasync defএকটি coroutine সংজ্ঞায়িত করতে. ব্যবহার করুনawaitএকটি ফলাফল প্রস্তুত না হওয়া পর্যন্ত বিরতি.
import asyncio
async def fetch_data(url: str) -> str:
await asyncio.sleep(0.5) # simulate network
return f'Data from {url}'
async def main():
result = await fetch_data('https://api.example.com')
print(result)
asyncio.run(main())
একসাথে কাজ চালানো
asyncio.gather()একযোগে একাধিক করোটিন চালায়। তিনটি 1-সেকেন্ডের কাজ ~1 সেকেন্ডে শেষ হয়, 3 নয়।
import asyncio, time
async def task(name: str, delay: float):
print(f'Start {name}')
await asyncio.sleep(delay)
return name
async def main():
start = time.time()
results = await asyncio.gather(
task('A', 1.0),
task('B', 2.0),
task('C', 0.5),
)
print(f'Done in {time.time()-start:.2f}s: {results}')
# ~2.0s not 3.5s
asyncio.run(main())
aiohttp
এর সাথে asyncio একই সময়ে 100টি URL আনুন প্রায় একই সময়ে একটি আনার সময়।
import asyncio, aiohttp
async def fetch(session, url):
async with session.get(url) as resp:
return await resp.text()
async def main():
urls = ['https://httpbin.org/delay/1'] * 5
async with aiohttp.ClientSession() as session:
results = await asyncio.gather(*[fetch(session, u) for u in urls])
print(f'Fetched {len(results)} pages')
asyncio.run(main())
asyncio.প্রযোজক-ভোক্তার জন্য সারি
import asyncio
async def producer(q: asyncio.Queue):
for i in range(5):
await q.put(f'item-{i}')
await asyncio.sleep(0.2)
await q.put(None) # sentinel
async def consumer(q: asyncio.Queue):
while True:
item = await q.get()
if item is None: break
print(f'Consumed {item}')
async def main():
q = asyncio.Queue(maxsize=3)
await asyncio.gather(producer(q), consumer(q))
asyncio.run(main())
ত্রুটি হ্যান্ডলিং
import asyncio
async def risky(n):
if n == 2: raise ValueError(f'Task {n} failed!')
return f'Task {n} OK'
async def main():
results = await asyncio.gather(
*[risky(i) for i in range(4)],
return_exceptions=True
)
for r in results:
print('Error:', r if isinstance(r, Exception) else r)
asyncio.run(main())
সর্বোত্তম অভ্যাস
- কখনও ব্যবহার করবেন না
time.sleep()— ব্যবহার করুনawait asyncio.sleep() - কোরোটিনের ভিতরে I/O ব্লক করা এড়িয়ে চলুন
- ব্যবহার করুন
asyncio.run()প্রবেশ বিন্দু হিসাবে - ব্যবহার করুন
asyncio.TaskGroup(পাইথন 3.11+) কাঠামোবদ্ধ একত্রিতার জন্য - |||| দিয়ে ডিবাগ করুন উপসংহার
PYTHONASYNCIODEBUG=1
asyncio হল Node.js-শৈলীর একযোগে পাইথনের উত্তর। মাস্টার
, প্রয়োজনে সারি যোগ করুন এবং ক্লিনার ত্রুটির সীমানাগুলির জন্য টাস্কগ্রুপে যান। API, স্ক্র্যাপার এবং মাইক্রোসার্ভিসের জন্য পারফেক্ট।asyncio.gather(), add queues when needed, and move to TaskGroup for cleaner error boundaries. Perfect for APIs, scrapers, and microservices.
🔗 Share this article
✍️ Leave a Comment