CherryPy তে Asynchronous Processing এবং Background Tasks ব্যবহারের মাধ্যমে আপনি দীর্ঘ-running কাজগুলো বা আই/ও অপারেশনগুলো (যেমন ডাটাবেস কুয়েরি, ফাইল আপলোড/ডাউনলোড) ওয়েব রিকোয়েস্টের প্রধান থ্রেড থেকে আলাদা করে চালাতে পারেন, যাতে সার্ভারের প্রতিক্রিয়া দ্রুত এবং কার্যকর থাকে। এই ধরনের টাস্কগুলো পরিচালনা করার জন্য CherryPy তে বিভিন্ন পদ্ধতি রয়েছে।
Asynchronous Processing এবং Background Tasks কী?
- Asynchronous Processing: ওয়েব সার্ভারে থ্রেডের অপেক্ষা না করে বিভিন্ন কাজ সমান্তরালভাবে বা আলাদাভাবে চালানোর প্রক্রিয়া। এতে ইউজার রিকোয়েস্টের জন্য অপেক্ষা না করে অন্য কাজ চলতে পারে।
- Background Tasks: দীর্ঘ-running কাজগুলো যেমন ফাইল প্রসেসিং বা বড় ডাটাবেস কুয়েরি ব্যবহারকারী রিকোয়েস্টের সাথে সম্পর্কিত না হয়ে ব্যাকগ্রাউন্ডে চালানো হয়।
CherryPy তে Asynchronous Processing
CherryPy তে অ্যাসিঙ্ক্রোনাস প্রসেসিং করার জন্য tools এবং threading মডিউল ব্যবহার করা যায়। এটি ব্যবহারকারীর রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য দ্রুত প্রতিক্রিয়া নিশ্চিত করে এবং একই সময়ে দীর্ঘ-running কাজগুলো ব্যাকগ্রাউন্ডে চলে।
উদাহরণ: CherryPy তে অ্যাসিঙ্ক্রোনাস প্রসেসিং
CherryPy তে অ্যাসিঙ্ক্রোনাস টাস্কের জন্য threading ব্যবহার করা যেতে পারে, যেখানে থ্রেড চালানোর জন্য একটি ব্যাকগ্রাউন্ড ফাংশন তৈরি করা হয়।
import cherrypy
import threading
import time
# ব্যাকগ্রাউন্ড টাস্ক
def background_task():
time.sleep(5) # ৫ সেকেন্ডের জন্য থামবে
print("ব্যাকগ্রাউন্ড টাস্ক শেষ!")
class MyApp:
@cherrypy.expose
def index(self):
# ব্যাকগ্রাউন্ড টাস্ক শুরু
threading.Thread(target=background_task).start()
return "ব্যাকগ্রাউন্ড টাস্ক চলছে, আপনি অন্য কাজ করতে পারেন!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে:
background_taskফাংশনটি একটি থ্রেডের মাধ্যমে ৫ সেকেন্ডের জন্য এক্সিকিউট হবে।- ব্যবহারকারী রিকোয়েস্টটি গ্রহণ করা হবে এবং এর পরবর্তী কাজ থ্রেডে চলে যাবে।
CherryPy তে Background Tasks
CherryPy তে long-running tasks যেমন ফাইল আপলোড বা বড় ডাটাবেস কুয়েরি ব্যাকগ্রাউন্ডে চালানোর জন্য আপনি অ্যাসিঙ্ক্রোনাস টাস্ক ব্যবহার করতে পারেন। এই ধরনের টাস্কগুলো ওয়েব সার্ভারের প্রধান থ্রেডের বাইরে চলে, যাতে ব্যবহারকারীর রিকোয়েস্টের প্রতিক্রিয়া দ্রুত হয়।
উদাহরণ: Background Task with CherryPy
import cherrypy
import time
# ব্যাকগ্রাউন্ড টাস্ক (ডাটাবেস কুয়েরি, ফাইল প্রসেসিং)
def background_task():
time.sleep(10) # দীর্ঘ-running কাজ
print("ব্যাকগ্রাউন্ড টাস্ক সম্পন্ন!")
class MyApp:
@cherrypy.expose
def index(self):
# ব্যাকগ্রাউন্ড টাস্ক শুরু
cherrypy.engine.spawn(background_task) # spawn ব্যাকগ্রাউন্ড টাস্ক
return "ব্যাকগ্রাউন্ড টাস্ক চলছে, আপনি এখন অন্য কাজ করতে পারেন!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে, cherrypy.engine.spawn() ব্যবহার করা হয়েছে, যা একটি নতুন থ্রেডে ব্যাকগ্রাউন্ড টাস্ক শুরু করে। ইউজার দ্রুত অন্য রিকোয়েস্টে রেসপন্স পাবে, এবং ব্যাকগ্রাউন্ডে টাস্কটি চলে যাবে।
CherryPy তে Asynchronous Requests (Non-Blocking)
CherryPy তে non-blocking I/O বা অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য cherrypy.engine এবং wsgi এর সাপোর্ট রয়েছে। আপনি ওয়েব সার্ভারকে কনফিগার করে যেকোনো টাইম-সেন্সিটিভ বা ব্লকিং কাজকে অ্যাসিঙ্ক্রোনাস ফ্যাশনে করতে পারেন।
উদাহরণ: Asynchronous Request with CherryPy
import cherrypy
import time
class MyApp:
@cherrypy.expose
def index(self):
# দীর্ঘ-running কাজ
time.sleep(3) # simulate blocking task
return "এটি অ্যাসিঙ্ক্রোনাস রিকোয়েস্ট।"
if __name__ == '__main__':
cherrypy.config.update({
'server.socket_host': '127.0.0.1',
'server.socket_port': 8080,
'tools.gzip.on': True,
})
cherrypy.quickstart(MyApp())
এই উদাহরণে, time.sleep(3) ওয়েব রিকোয়েস্ট ব্লক করতে পারে, তবে যদি আপনি অ্যাসিঙ্ক্রোনাস কনফিগারেশন ব্যবহার করেন তবে সার্ভার দ্রুত রেসপন্স দিবে এবং অন্য রিকোয়েস্ট প্রসেস করতে পারবে।
CherryPy তে Background Task Management
CherryPy তে long-running background tasks পরিচালনা করার জন্য, আপনি বাইরের লাইব্রেরি যেমন Celery ব্যবহার করতে পারেন। Celery ওয়েব অ্যাপ্লিকেশনগুলির জন্য কার্যকরী ব্যাকগ্রাউন্ড টাস্ক ব্যবস্থাপনা সরবরাহ করে।
উদাহরণ: Celery এর মাধ্যমে ব্যাকগ্রাউন্ড টাস্ক
Celery ব্যবহার করে আপনি ব্যাকগ্রাউন্ড টাস্কগুলোর ব্যাচ প্রক্রিয়া চালাতে পারেন। এখানে Celery সেটআপের জন্য কিছু প্রয়োজনীয় পদক্ষেপ দেয়া হয়েছে:
Celery ইনস্টল করুন:
pip install celery- Celery ব্যবহার করা উদাহরণ:
from celery import Celery
import cherrypy
# Celery অ্যাপ্লিকেশন তৈরি
celery = Celery('tasks', broker='redis://localhost:6379/0')
@celery.task
def long_task():
# দীর্ঘ-running কাজ
return "ব্যাকগ্রাউন্ড কাজ সম্পন্ন হয়েছে!"
class MyApp:
@cherrypy.expose
def index(self):
long_task.delay() # ব্যাকগ্রাউন্ড টাস্ক শুরু
return "ব্যাকগ্রাউন্ড টাস্ক চলছে!"
if __name__ == '__main__':
cherrypy.quickstart(MyApp())
এখানে Celery ব্যবহার করে ব্যাকগ্রাউন্ড টাস্কগুলো রান করানো হচ্ছে। Redis ব্রোকার ব্যবহার করা হয়েছে, তবে আপনি অন্যান্য ব্রোকারও ব্যবহার করতে পারেন।
CherryPy তে Asynchronous Processing এবং Background Tasks ওয়েব অ্যাপ্লিকেশনকে আরও দ্রুত এবং দক্ষ করে তোলে। আপনি ব্যাকগ্রাউন্ড টাস্ক চালিয়ে ব্যবহারকারীর রিকোয়েস্টের প্রতিক্রিয়া দ্রুত দিতে পারেন এবং দীর্ঘ-running কাজগুলো থ্রেড বা Celery এর মাধ্যমে পরিচালনা করতে পারেন। CherryPy তে threading এবং spawn পদ্ধতি ব্যবহার করে অ্যাসিঙ্ক্রোনাস কাজগুলি সুনির্দিষ্টভাবে কার্যকরভাবে করা যায়।
Read more