محتويات الدورة

FastAPI / المتقدم: الحياة وتصميم خدمة موثوقة / الدرس 14

عمل الخلفية والوظائف الدائمة

ميز مهام العملية القريبة من الرد من معالجة دائمة بعقد تسليم ومحاولة واستعادة صريح.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح افتراضات وحدود موضوع «عمل الخلفية والوظائف الدائمة».
  • فسر المثالين الكاملين وعلل المخرجات الملاحظة.
  • شخص الإخفاقات وطبق الحلول المشروحة مع وضوح ملكية الهوية والحالة ودورة الحياة.

BackgroundTasks وسيلة تنفيذ

تلحق الأداة عملا بعد الرد ولا تنشئ طابورا دائما أوعمالا أوضمان مرة واحدة. قد يفقد التعطل والنشر العمل. يضيف المثال حدثا لقائمة ويعيد 202، وينتظر TestClient المهمة بالإصدار فتثبت النتيجة. لا يثبت رد العميل الحقيقي الاكتمال، ويلزم عقد نتيجة لاحقة للمهم.

python فحص مهمة خلفية داخلية كامل
from fastapi import BackgroundTasks, FastAPI
from fastapi.testclient import TestClient
recorded = []
def record(operation_id): recorded.append(operation_id)
app = FastAPI()
@app.post("/enqueue-lab", status_code=202)
def enqueue(background: BackgroundTasks):
    background.add_task(record, "lab-a")
    return {"accepted": True}
with TestClient(app) as client:
    response = client.post("/enqueue-lab")
    print(response.status_code, response.json())
    print(recorded)
الناتج المتوقع
202 {'accepted': True}
['lab-a']

يرى العميل المهمة قبل العودة، والقائمة غير دائمة ولا ينشئ المسار طابورا أوعملا خارجيا.

اختيار ما يحتمل الفقد

يختلف أفضل جهد صغير عن الدفع والمخزون والإشعار؛ فحدد الفقد والتكرار والتأخير والترتيب ومالك النتيجة. لا تؤخر الحرج لمظهر السرعة. احفظ قبول الوظيفة دائما قبل الوعد؛ وقد تترك كتابة ثم نشر فجوة تحتاج outbox لا callback.

ملكية الفشل بعد حد الرد

لا يستبدل فشل لاحق ردا مرسلا عادة. يسجل المثال فشلا معروفا ويبقى 202 لتمييز النتيجتين لا ابتلاع الخطأ. تحتاج المهمة تشخيصا وحالة أومحاولة ومالكا وترتيبا وفشل عدة callbacks. لا تسجل الحساس أوتعد HTTP نجاح كل أثر.

python فحص فشل مهمة مستقل كامل
from fastapi import BackgroundTasks, FastAPI
from fastapi.testclient import TestClient
outcomes = []
def work():
    try:
        raise ValueError("synthetic task failure")
    except ValueError:
        outcomes.append({"state": "failed", "code": "LAB_FAILURE"})
app = FastAPI()
@app.post("/work", status_code=202)
def accept(background: BackgroundTasks):
    background.add_task(work)
    return {"accepted": True}
with TestClient(app) as client:
    response = client.post("/work")
    print(response.status_code, response.json())
    print(outcomes)
الناتج المتوقع
202 {'accepted': True}
[{'state': 'failed', 'code': 'LAB_FAILURE'}]

يبقى الرد قبولا والنتيجة فاشلة، والتسجيل بالقائمة مختبر لا ملكية دائمة للإنتاج.

استخدام مدخل مستقل وموارد محدودة

مرر قيما ثابتة متحققا منها أومعرفا لا طلبا متغيرا أوجلسة منتهية. تستهلك العادية المجمع وقد تحجب async الحلقة بعمل حاجب. حد الزمن والحجم والمحاولة والخلفية. قد تحتاج الثقيلة عاملا مستقلا بملكية وثقة وحفظ وإغلاق، ولا تقرر المكتبة منع التكرار والذرية والإعادة عنك.

اختبار الضمان المدعى تحديدا

تثبت الاختبارات التوصيل والمدخل والفشل والتنظيف لا البقاء والتوزيع. استخدم اكتمالا مضبوطا لا نوما. لا يبدأ المثال عاملا أوخادما أوطابورا أوبريدا أوقاعدة ولا أثرا خارجيا. اختبر للدائم القطع والتكرار والمجهول والإغلاق بعزلة مصرح بها، وأعلن القبول أوالاكتمال بالدليل لا سرعة المعالج.

الأخطاء الشائعة وإصلاحها

تعد المهمة الملحقة طابورا دائما

لماذا يحدث؟
اختلطت الجدولة بالحفظ والتسليم.
كيف تصلحه؟
حدد القبول الدائم والاستعادة.
كيف تتجنب تكراره؟
اختبر الفقد والتكرار مستقلة.

تلتقط المهمة جلسة مغلقة

لماذا يحدث؟
اختلط العمـران.
كيف تصلحه؟
مرر الثابت واملك مواردها.
كيف تتجنب تكراره؟
راجع التنظيف والترتيب بالإصدار.

تبلغ 202 اكتمال الآثار

لماذا يحدث؟
اختلط القبول والنتيجة.
كيف تصلحه؟
اعرض أوسجل حالة مستقلة.
كيف تتجنب تكراره؟
طابق الوعد والدليل.

اختبر فهمك

1. قد تعاد العملية فور 202. ماذا يضمن تصميم حرج قبل الرد؟

اعرض الحل المشروح

احفظ العملية أونيتها بذريّة مناسبة قبل وعد القبول الدائم؛ فلا يثبته callback بالذاكرة. حدد الملاحظة والاستئناف والمحاولة الآمنة.

2. لماذا لا يكفي نجاح الخلفية بالعميل للتسليم الفعلي؟

اعرض الحل المشروح

يثبت حياة داخلية دون فقد أومجهول موزع أوخارج، فافصل تحقق العامل والحفظ والمحاولة والتسوية المصرح.

أهم ما تعلمته

  • تلحق الأداة عملا بعد الرد ولا تنشئ طابورا دائما أوعمالا أوضمان مرة واحدة.
  • لا يستبدل فشل لاحق ردا مرسلا عادة.
  • تثبت الاختبارات التوصيل والمدخل والفشل والتنظيف لا البقاء والتوزيع.

المراجع الرسمية