Asynchronous Programming (অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং) হল একটি প্রোগ্রামিং প্যারাডাইম যেখানে টাইম-থ্রেটিং এবং দীর্ঘ সময় ধরে চলা কাজগুলি (যেমন I/O অপারেশন, ডাটাবেস কুয়েরি, API কল ইত্যাদি) অন্য কোনো কাজ বাধা না দিয়ে সম্পন্ন করা হয়। Python তে asyncio লাইব্রেরি এবং async/await কিওয়ার্ড ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং করা যায়। FastAPI এই ধরনের প্রোগ্রামিং সহজেই সমর্থন করে, যা দ্রুত এবং স্কেলেবল API তৈরি করতে সাহায্য করে।
FastAPI এবং Asynchronous Programming
FastAPI হল একটি ASGI (Asynchronous Server Gateway Interface) ফ্রেমওয়ার্ক, যা synchronous এবং asynchronous কোড উভয়ই সমর্থন করে। FastAPI অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের সুবিধা নিতে async এবং await কিওয়ার্ড ব্যবহার করে কার্যকলাপ সম্পন্ন করতে পারে, যেমন ডাটাবেস থেকে ডাটা পড়া, থার্ড-পার্টি API কল করা, ফাইল I/O ইত্যাদি।
Asynchronous Programming এর সুবিধা
- দ্রুত পারফরম্যান্স: অ্যাসিঙ্ক্রোনাস কোড অনেক দ্রুত এবং কম সিস্টেম রিসোর্স ব্যবহার করে।
- স্কেলেবিলিটি: অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং একাধিক I/O অপারেশনকে একযোগে প্রক্রিয়া করতে পারে, যার ফলে ওয়েব অ্যাপ্লিকেশন উচ্চ লোড সহ ভালভাবে স্কেল করতে সক্ষম হয়।
- এফিশিয়েন্ট রিসোর্স ব্যবহারের ক্ষমতা: সিঙ্ক্রোনাস কোডের তুলনায় অ্যাসিঙ্ক্রোনাস কোড অধিক কার্যক্ষমভাবে সিস্টেম রিসোর্স ব্যবহার করে।
FastAPI তে Asynchronous Programming এর ব্যবহার
FastAPI তে asynchronous কোড লেখার জন্য async এবং await কিওয়ার্ড ব্যবহার করা হয়। এটি মূলত I/O-bound অপারেশনের জন্য উপযুক্ত, যেমন ডাটাবেস কোয়েরি, API কল, এবং ফাইল হ্যান্ডলিং।
উদাহরণ ১: Asynchronous Route
from fastapi import FastAPI
import asyncio
app = FastAPI()
# Asynchronous Route
@app.get("/")
async def read_root():
await asyncio.sleep(1) # Simulating a non-blocking task
return {"message": "Hello, FastAPI!"}
এখানে, async def দিয়ে রাউটটি ডিফাইন করা হয়েছে এবং await asyncio.sleep(1) ব্যবহৃত হয়েছে যা এক সেকেন্ড অপেক্ষা করবে কিন্তু অন্য কোনো কাজের জন্য ব্লক করবে না। এটি অ্যাসিঙ্ক্রোনাস কোডের একটি সাধারণ উদাহরণ।
রিকোয়েস্ট উদাহরণ:
GET /
রেসপন্স:
{
"message": "Hello, FastAPI!"
}
এখানে, await asyncio.sleep(1) ব্যবহারের ফলে সার্ভার এক সেকেন্ড অপেক্ষা করে, কিন্তু এটি অন্য রিকোয়েস্ট ব্লক করবে না। আপনি অন্যান্য রিকোয়েস্ট গ্রহণ করতে পারবেন।
Asynchronous I/O Operation (ডাটাবেস বা API কল)
FastAPI-তে অ্যাসিঙ্ক্রোনাস ফাংশন ব্যবহার করে আপনি ডাটাবেস থেকে ডাটা পড়তে বা API কল করতে পারেন, যেটি I/O-bound অপারেশন। এখানে, আমরা দেখব কিভাবে অ্যাসিঙ্ক্রোনাস API কল করা যায়।
উদাহরণ ২: Asynchronous Database Query (Simulated)
from fastapi import FastAPI
import asyncio
app = FastAPI()
# Simulating an asynchronous database query
async def get_item_from_db(item_id: int):
await asyncio.sleep(2) # Simulate delay
return {"item_id": item_id, "name": "Laptop", "price": 1500.00}
@app.get("/items/{item_id}")
async def read_item(item_id: int):
item = await get_item_from_db(item_id)
return item
এখানে, get_item_from_db একটি অ্যাসিঙ্ক্রোনাস ফাংশন, যা ডাটাবেস থেকে ডাটা পড়তে ২ সেকেন্ড সময় নিবে, কিন্তু অন্যান্য রিকোয়েস্ট প্রসেস করা যাবে। await ব্যবহার করে এই ফাংশনটি ডাটাবেস কোয়েরি শেষ না হওয়া পর্যন্ত অন্য কাজ করতে বাধা সৃষ্টি করবে না।
রিকোয়েস্ট উদাহরণ:
GET /items/123
রেসপন্স:
{
"item_id": 123,
"name": "Laptop",
"price": 1500.00
}
এখানে, await get_item_from_db(item_id) ব্যবহার করা হয়েছে যাতে ডাটাবেস কোয়েরি চলাকালীন সার্ভার অন্য কাজ করতে পারে।
Asynchronous File I/O Operation
FastAPI-তে অ্যাসিঙ্ক্রোনাস ফাইল I/O অপারেশনও করা সম্ভব, যেখানে আপনি ফাইল পড়া বা লেখার সময় সার্ভারের রেসপন্স ব্লক না করে অন্যান্য কাজ চালাতে পারেন।
উদাহরণ ৩: Asynchronous File Reading
from fastapi import FastAPI
import aiofiles # For asynchronous file handling
app = FastAPI()
@app.get("/readfile/")
async def read_file():
async with aiofiles.open('sample.txt', mode='r') as file:
content = await file.read()
return {"file_content": content}
এখানে aiofiles ব্যবহার করা হয়েছে, যা ফাইল অপারেশনকে অ্যাসিঙ্ক্রোনাসভাবে পরিচালনা করে, যাতে সার্ভার কোনো ফাইলের সাথে কাজ করার সময় ব্লক না হয়ে অন্য রিকোয়েস্ট গ্রহণ করতে পারে।
রিকোয়েস্ট উদাহরণ:
GET /readfile/
রেসপন্স:
{
"file_content": "This is a sample file content."
}
Asynchronous API Calls
FastAPI তে async ও await ব্যবহার করে আপনি একাধিক API কলও অ্যাসিঙ্ক্রোনাসভাবে করতে পারেন, যা I/O-bound অপারেশনকে দ্রুত সম্পন্ন করতে সাহায্য করে।
উদাহরণ ৪: Asynchronous HTTP Requests
import httpx
from fastapi import FastAPI
app = FastAPI()
# Asynchronous API call using httpx
@app.get("/external-api/")
async def get_external_data():
async with httpx.AsyncClient() as client:
response = await client.get('https://api.example.com/data')
return response.json()
এখানে httpx.AsyncClient() ব্যবহার করে অ্যাসিঙ্ক্রোনাস HTTP রিকোয়েস্ট করা হয়েছে, যা await ব্যবহার করে রেসপন্স পাওয়ার আগে অন্য কাজ করার সুযোগ দেয়।
Asynchronous Programming-এর সুবিধা
- দ্রুত এবং স্কেলেবল: অ্যাসিঙ্ক্রোনাস কোড উচ্চ লোড সহ ভালভাবে কাজ করতে সক্ষম, কারণ এটি একাধিক কাজ একযোগে করতে পারে।
- কম রিসোর্স ব্যবহার: অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং সিস্টেমের রিসোর্সের ব্যবহার অধিক কার্যকর করে, বিশেষ করে I/O-bound অপারেশনগুলো।
- থ্রেড ব্যবহার কমানো: অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং থ্রেড-ভিত্তিক সিস্টেমের চেয়ে কম রিসোর্স ব্যবহার করে, যার ফলে সিস্টেমের পারফরম্যান্স বাড়ে।
FastAPI তে Asynchronous Programming ব্যবহারের মাধ্যমে আপনি উচ্চ পারফরম্যান্স এবং স্কেলেবিলিটি নিশ্চিত করতে পারেন। async এবং await কিওয়ার্ড ব্যবহার করে, অ্যাসিঙ্ক্রোনাস HTTP রিকোয়েস্ট, ডাটাবেস কোয়েরি, ফাইল I/O এবং অন্যান্য I/O-bound কাজগুলি দ্রুত এবং কম রিসোর্স ব্যবহার করে সম্পন্ন করা যায়। FastAPI এই ধরনের প্রোগ্রামিং খুব সহজ করে তোলে, যা ডেভেলপারদের দ্রুত এবং কার্যকর API তৈরি করতে সাহায্য করে।
Read more