Darslik · 2025-11-22 · ~2 daqiqa o‘qiladi · o'rta
Celery bilan fon vazifalarni bajarish
Mundarija
Foydalanuvchi tugmani bosdi, sizga esa email yuborish, rasmni qayta ishlash yoki hisobot tayyorlash kerak. Bularni so‘rov ichida qilsangiz, foydalanuvchi soniyalab kutadi. Yechim — bu ishlarni fonga o‘tkazish. Bu yerda Celery yordam beradi.
Ish qanday oqadi#
- Web-ilova vazifani navbatga (broker, odatda Redis) qo‘yadi
- Foydalanuvchiga darhol javob qaytaradi
- Alohida worker jarayoni navbatdan vazifani oladi va bajaradi
Foydalanuvchi kutmaydi, ish esa fonda bajariladi.
Sodda misol#
from celery import Celery
app = Celery("tasks", broker="redis://localhost:6379/0")
@app.task
def send_welcome_email(user_id):
user = get_user(user_id)
send_email(user.email, "Xush kelibsiz!")
Web-ilovada uni chaqirish:
send_welcome_email.delay(user.id) # darhol qaytadi, ish fonda
.delay() — vazifani navbatga qo‘yadi va zudlik bilan qaytadi. Email esa
worker tomonidan yuboriladi.
Worker'ni ishga tushirish#
celery -A tasks worker --loglevel=info
Qachon ishlatish kerak#
- Email/SMS yuborish — tashqi servis sekin bo‘lishi mumkin
- Rasm/video qayta ishlash — CPU'ni ko‘p oladi
- Hisobot generatsiya — uzoq davom etadi
- Rejalashtirilgan vazifalar (Celery Beat bilan) — har kuni backup, tozalash
Ehtiyot bo‘lish kerak bo‘lgan joylar#
- Vazifalar idempotent bo‘lsin — qayta bajarilsa ham zarar bo‘lmasin (worker qayta urinishi mumkin).
- Vazifaga ob'ekt emas, ID uzating — ma'lumot vazifa bajarilgunga eskirmasligi uchun.
- Xatolarni kuzating — worker jimgina yiqilishi mumkin, monitoring qo‘ying.
Celery — Python backend'da fon vazifalar uchun standart yechim. Ilova o‘sganda u deyarli muqarrar kerak bo‘ladi.