أ مدير التحميل هو في الأساس برنامج كمبيوتر مخصص لمهمة تنزيل الملفات المستقلة من الإنترنت. سنقوم هنا بإنشاء مدير تنزيل بسيط بمساعدة سلاسل المحادثات في Python. باستخدام سلاسل العمليات المتعددة، يمكن تنزيل الملف على شكل أجزاء في وقت واحد من سلاسل رسائل مختلفة. لتنفيذ ذلك، سنقوم بإنشاء أداة سطر أوامر بسيطة تقبل عنوان URL للملف ثم تقوم بتنزيله.
المتطلبات الأساسية: جهاز يعمل بنظام Windows مع تثبيت Python.
يثبت
قم بتنزيل الحزم المذكورة أدناه من موجه الأوامر.
1. Click package: Click عبارة عن حزمة Python لإنشاء واجهات سطر أوامر جميلة مع أقل قدر ممكن من التعليمات البرمجية حسب الضرورة. إنها مجموعة أدوات إنشاء واجهة سطر الأوامر.
انقر فوق تثبيت النقطة
2. حزمة الطلبات: في هذه الأداة سنقوم بتنزيل ملف بناءً على عنوان URL (عناوين HTTP). الطلبات عبارة عن مكتبة HTTP مكتوبة بلغة Python والتي تسمح لك بإرسال طلبات HTTP. يمكنك إضافة رؤوس وملفات بيانات متعددة الأجزاء ومعلمات باستخدام قواميس Python البسيطة والوصول إلى بيانات الاستجابة بنفس الطريقة.
طلبات تثبيت النقطة
3. حزمة الخيوط: للعمل مع الخيوط نحتاج إلى حزمة الخيوط.
خيوط تثبيت النقطة
تطبيق
ملحوظة:
تم تقسيم البرنامج إلى أجزاء لتسهيل فهمه. تأكد من عدم فقدان أي جزء من الكود أثناء تشغيل البرنامج.
دمج النوع
الخطوة 1: استيراد الحزم المطلوبة
توفر هذه الحزم الأدوات اللازمة لجعل طلبات الويب تتعامل مع مدخلات سطر الأوامر وإنشاء سلاسل الرسائل.
Pythonimport click import requests import threading
الخطوة 2: إنشاء وظيفة المعالج
سيقوم كل مؤشر ترابط بتنفيذ هذه الوظيفة لتنزيل الجزء المحدد من الملف. هذه الوظيفة مسؤولة عن طلب نطاق معين فقط من البايتات وكتابتها في الموضع الصحيح في الملف.
Pythondef Handler(start end url filename): headers = {'Range': f'bytes={start}-{end}'} r = requests.get(url headers=headers stream=True) with open(filename 'r+b') as fp: fp.seek(start) fp.write(r.content)
الخطوة 3: تحديد الوظيفة الرئيسية بالنقر
يحول الوظيفة إلى أداة مساعدة لسطر الأوامر. يحدد هذا كيفية تفاعل المستخدمين مع البرنامج النصي من سطر الأوامر.
Python#Note: This code will not work on online IDE @click.command(help='Downloads the specified file with given name using multi-threading') @click.option('--number_of_threads' default=4 help='Number of threads to use') @click.option('--name' type=click.Path() help='Name to save the file as (with extension)') @click.argument('url_of_file' type=str) def download_file(url_of_file name number_of_threads):
الخطوة 4: تعيين اسم الملف وتحديد حجم الملف
نحتاج إلى حجم الملف لتقسيم التنزيل بين سلاسل الرسائل والتأكد من أن الخادم يدعم التنزيلات المتنوعة.
Python r = requests.head(url_of_file) file_name = name if name else url_of_file.split('/')[-1] try: file_size = int(r.headers['Content-Length']) except: print('Invalid URL or missing Content-Length header.') return
الخطوة 5: التخصيص المسبق لمساحة الملف
يضمن التخصيص المسبق أن يكون الملف بالحجم الصحيح قبل أن نكتب أجزاء إلى نطاقات بايت محددة.
Python part = file_size // number_of_threads with open(file_name 'wb') as fp: fp.write(b'