Breaking News
القائمة

كيفية تسريع أكواد لغة Python البطيئة: دليل التحسين للمبتدئين

كيفية تسريع أكواد لغة Python البطيئة: دليل التحسين للمبتدئين
Advertisement

محتويات المقال

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

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

المتطلبات الأساسية والأدوات المطلوبة

  • تثبيت إصدار Python 3.10 أو أحدث على نظامك.
  • فهم أساسي للوظائف، والحلقات التكرارية، والقوائم.
  • الإلمام بوحدة time القياسية.
  • تثبيت مكتبة pandas ومكتبة numpy للعمليات الرقمية.
pip install pandas numpy

5 خطوات لتحسين أداء لغة Python

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

    import time
    
    

    def load_records(): return list(range(100_000))

    def filter_records(records): return [r for r in records if r % 2 == 0]

    def generate_report(records): return sum(records)

    start = time.perf_counter() records = load_records() print(f"Load : {time.perf_counter() - start:.4f}s")

  2. استبدل الحلقات التكرارية اليدوية بالوظائف المدمجة في لغة Python مثل وظيفة sum()، ووظيفة map()، ووظيفة sorted().
    يتيح هذا للنص البرمجي الخاص بك الاستفادة من تطبيقات لغة C الأساسية، والتي تعد أسرع بكثير من تنفيذ منطق مكافئ في حلقات لغة Python الخالصة.

    import time
    numbers = list(range(1_000_000))
    
    

    # Built-in sum() is nearly 6x faster than a manual loop start = time.perf_counter() total = sum(numbers) print(f"Built-in : {time.perf_counter() - start:.4f}s → {total}")

  3. استخرج العمليات المكلفة وغير المتغيرة وضعها خارج الحلقات التكرارية.
    يمنع هذا برنامجك من تنفيذ مهام متكررة بشكل مستمر، مثل تجميع أنماط التعبيرات النمطية أو تحويل القوائم إلى مجموعات، في كل تكرار.

    import re
    
    

    # Fast: compile once, reuse DIGIT_PATTERN = re.compile(r'\d+')

    def extract_fast(text): return DIGIT_PATTERN.findall(text)

  4. بدّل من استخدام القوائم إلى المجموعات عند إجراء فحوصات العضوية باستخدام عامل in.
    يقلل هذا من أوقات البحث من الوقت الخطي إلى الوقت الثابت، مما يسرع العمليات بشكل كبير عند التحقق من مجموعات بيانات تحتوي على آلاف العناصر.

    import time
    import random
    
    

    all_customers = [f"CUST-{i}" for i in range(100_000)] ordered = [f"CUST-{i}" for i in random.sample(range(100_000), 10_000)]

    # Fast: ordered is a set ordered_set = set(ordered) start = time.perf_counter() repeat_customers = [c for c in all_customers if c in ordered_set] print(f"Set : {time.perf_counter() - start:.4f}s")

  5. نفّذ تقنية الاتجاهية (Vectorization) باستخدام مكتبات مثل مكتبة NumPy ومكتبة pandas عند معالجة البيانات الرقمية.
    يسمح لك هذا بتطبيق العمليات على مصفوفات كاملة في وقت واحد عبر أكواد لغة C المحسنة، مما يلغي تماماً الحاجة إلى التكرار البطيء على مستوى لغة Python.

رأيي التقني

يعد الانتقال من كتابة الحلقات التكرارية اليدوية إلى الاستفادة من الواجهة الخلفية للغة C الخاصة بلغة Python علامة فارقة لأي مطور. وكما يتضح من زيادة السرعة بمقدار 6 أضعاف تقريباً عند التبديل من حلقة يدوية إلى وظيفة sum() المدمجة، فقد تم تصميم اللغة صراحةً لمكافأة المطورين الذين يفهمون بنيتها الأساسية. غالباً ما تؤدي كتابة أكواد أقل إلى تنفيذ أسرع، شريطة أن تستخدم الأدوات المدمجة الصحيحة.

علاوة على ذلك، فإن الفجوة الهائلة في الأداء بين عمليات البحث في القوائم والمجموعات، والتي انخفضت من 16.7 ثانية إلى 0.0095 ثانية فقط في مثال معرفات العملاء، تسلط الضوء على حقيقة حاسمة: غالباً ما تكون الكفاءة الخوارزمية أكثر أهمية من قوة الحوسبة الخام. المطورون الذين يعتمدون على القوائم لكل هيكل بيانات سيواجهون حتماً جداراً في الأداء مع توسع مجموعات بياناتهم إلى مئات الآلاف.

بالنظر إلى المستقبل، ومع استمرار هيمنة أعباء عمل علوم البيانات والذكاء الاصطناعي على بيئة البرمجيات، فإن إتقان تقنية الاتجاهية باستخدام أدوات مثل مكتبة NumPy ومكتبة pandas لم يعد خياراً. أوصي بشدة أن يتوقف المبتدئون عن محاولة التفوق على المفسّر بمنطق معقد، وأن يعتمدوا بدلاً من ذلك بشكل كبير على المكتبة القياسية المحسنة وهياكل البيانات المعتمدة من جهات خارجية.

المصادر: kdnuggets.com ↗
Advertisement
هل أعجبك هذا المقال؟

عمليات البحث الشائعة