redisjobs

طابور مهام Async صغير وقوي فوق Redis

Python 3.12redis.asynciopytestfakeredis

كود المصدر على GitHub

رخصة: MIT

الفكرة

في كل مشروع يحتاج تشغيل مهام في الخلفية (رسم صور، إرسال رسائل، معالجة ملفات)، كانت المشكلة تتكرر: بنحتاج طابور موثوق من غير ما نجرّب معالجات أثقل من اللازم. الحل: طابور فوق أوامر ريديس الذرّية نفسه.

التسليم الموثوق

المهمة بتتحجز بـ BLMOVE (تأخذ من طابور الانتظار وتوضع في طابور قيد التنفيذ بعملية واحدة ذرّية). لو العامل مات بوسط الشغل، الـ reaper بيلقط المهام العالقة ويشيلها تاني للمعالجة. النتيجة delivery من نوع at-least-once: مفيش مهمة بتتحذف من غير ما تتأكد إنها عملت.

التفاصيل العملية

  • Retries: backoff أُسّي مع jitter عشان نتجنب الانفجار المتزامن.
  • DLQ: المهام اللي استنفدت محاولاتها بتتوقف مكانها، مش بتتضيع.
  • جدولة: enqueue_in وenqueue_at مع scheduler مدمج.
  • أولويات وسارية الإلغاء التعاوني.

الكود مكتوب كله بـ type hints، والاختبارات بتشتغل على fakeredis من غير خادم Redis حقيقي، يعني CI خفيفة وسريعة.