with session.get(url, stream=True, proxies=routes,
                 timeout=(5, 30)) as response:
    response.raise_for_status()
    with open(part_path, 'wb') as output:
        for chunk in response.iter_content(chunk_size=64 * 1024):
            if chunk:
                output.write(chunk)

استخدم هذا النمط مع جلسة Requests الموجودة في التطبيق ومسارات الوسيط وعنوان URL ومسار الإخراج المؤقت. بالنسبة لمسار HTTP عام، توفر قائمة وسطاء HTTP عناوين مرشحة لخريطة الوسيط الخاصة بك. يستهلك نمط التدفق الجسم تدريجيًا بدلًا من الحصول على response.content ثم كتابة كائن ثانٍ بالحجم الكامل.

حافظ على هذه الخاصية طوال التنزيل: يؤجل stream=True الجسم، لكن الوصول إلى response.content بعده قد يجمع كله في الذاكرة. حجم القطعة في iter_content هو تفضيل قراءة، وليس طلبًا لترميز نقل HTTP المجزأ عند الموقع أو الوسيط.

يغلق مدير سياق الاستجابة الاستجابة حتى لو فشلت الكتابة أو توقف التطبيق مبكرًا. زوج المهلات التوضيحي ليس موعدًا نهائيًا بساعة الحائط للنقل كله؛ اضبط سياسة عمر التنزيل بشكل منفصل حسب الحاجة.

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

مقالات ذات صلة