كمطورين لـ Python، غالبًا ما نركز على تشغيل التعليمات البرمجية الخاصة بنا قبل أن نقلق بشأن تحسينها. ومع ذلك، عند التعامل مع التطبيقات واسعة النطاق أو التعليمات البرمجية ذات الأداء الحرج، يصبح التحسين أمرًا بالغ الأهمية. في هذا المنشور، سنغطي أداتين قويتين يمكنك استخدامهما لتحسين كود Python الخاص بك: وحدة cProfile ومترجم PyPy.
بنهاية هذه التدوينة ستتعلم:
تشتهر لغة بايثون بسهولة الاستخدام وسهولة القراءة والنظام البيئي الواسع للمكتبات. ولكنها أيضًا أبطأ من بعض اللغات الأخرى مثل C أو Java نظرًا لطبيعتها المترجمة. لذلك، فإن معرفة كيفية تحسين كود Python الخاص بك يمكن أن يكون أمرًا بالغ الأهمية في التطبيقات الحساسة للأداء، مثل نماذج التعلم الآلي، أو أنظمة الوقت الفعلي، أو أنظمة التداول عالية التردد.
يتبع التحسين عادة الخطوات التالية:
الآن، لنبدأ بتنميط الكود الخاص بك.
cProfile عبارة عن وحدة Python مدمجة لتوصيف الأداء. فهو يتتبع مقدار الوقت الذي تستغرقه كل وظيفة في التعليمات البرمجية الخاصة بك للتنفيذ، مما يمكن أن يساعدك في تحديد الوظائف أو أقسام التعليمات البرمجية التي تسبب التباطؤ.
إن أبسط طريقة لتعريف البرنامج النصي هي تشغيل cProfile من سطر الأوامر. على سبيل المثال، لنفترض أن لديك برنامجًا نصيًا يسمى my_script.py:
python -m cProfile -s cumulative my_script.py
توضيح:
سيؤدي هذا إلى إنشاء تحليل تفصيلي للمكان الذي يقضي فيه الكود الخاص بك وقته.
دعونا نلقي نظرة على برنامج بايثون الأساسي الذي يحسب أرقام فيبوناتشي بشكل متكرر:
def fibonacci(n): if nتشغيل هذا البرنامج النصي باستخدام cProfile:
python -m cProfile -s cumulative fibonacci_script.pyفهم إخراج cProfile
بمجرد تشغيل cProfile، سترى شيئًا مثل هذا:
ncalls tottime percall cumtime percall filename:lineno(function) 8320 0.050 0.000 0.124 0.000 fibonacci_script.py:3(fibonacci)يوفر كل عمود بيانات الأداء الرئيسية:
إذا كانت دالة فيبوناتشي تستغرق وقتًا طويلاً، فسوف يوضح لك هذا الإخراج أين يجب تركيز جهود التحسين الخاصة بك.
يمكنك أيضًا استخدام cProfile برمجيًا ضمن التعليمات البرمجية الخاصة بك إذا كنت تريد فقط إنشاء ملف تعريف لأقسام محددة.
import cProfile def fibonacci(n): if nالخطوة 2: تحسين كود بايثون الخاص بك
بمجرد تحديد الاختناقات في التعليمات البرمجية الخاصة بك باستخدام cProfile، فقد حان الوقت للتحسين.
تقنيات تحسين بايثون الشائعة
- استخدام الوظائف المضمنة: تم تحسين الوظائف المضمنة مثل sum() وmin() وmax() بشكل كبير في Python وعادة ما تكون أسرع من الحلقات المنفذة يدويًا.
مثال:
# Before: Custom sum loop total = 0 for i in range(1000000): total = i # After: Using built-in sum total = sum(range(1000000))
- تجنب استدعاءات الوظائف غير الضرورية: استدعاءات الوظائف لها حمل، خاصة الحلقات الداخلية. حاول تقليل المكالمات الزائدة.
مثال:
# Before: Unnecessary repeated calculations for i in range(1000): print(len(my_list)) # len() is called 1000 times # After: Compute once and reuse list_len = len(my_list) for i in range(1000): print(list_len)
- الحفظ: بالنسبة للوظائف العودية، يمكنك استخدام الحفظ لتخزين نتائج العمليات الحسابية باهظة الثمن لتجنب العمل المتكرر.
مثال:
from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if nيؤدي هذا إلى تسريع عملية حسابية فيبوناتشي بشكل كبير عن طريق تخزين نتائج كل استدعاء متكرر.
الخطوة 3: استخدام PyPy للتجميع في الوقت المناسب
ما هو بيبى؟
PyPy هو مترجم Python بديل يستخدم تجميع Just-in-Time (JIT) لتسريع كود Python الخاص بك. يقوم PyPy بتجميع مسارات التعليمات البرمجية التي يتم تنفيذها بشكل متكرر في كود الجهاز، مما يجعله أسرع بكثير من مترجم CPython القياسي لمهام معينة.
تثبيت باي باي
يمكنك تثبيت PyPy باستخدام مدير الحزم مثل apt على Linux أو Brew على macOS:
# On Ubuntu sudo apt-get install pypy3 # On macOS (using Homebrew) brew install pypy3تشغيل كود بايثون مع PyPy
بمجرد تثبيت PyPy، يمكنك تشغيل البرنامج النصي الخاص بك به بدلاً من CPython:
pypy3 my_script.pyلماذا استخدام PyPy؟
الآن، دعونا ندمج هذه الأدوات لتحسين كود بايثون الخاص بك بشكل كامل.
دعونا نعيد النظر في مثال فيبوناتشي الخاص بنا ونجمع كل شيء معًا.
from functools import lru_cache @lru_cache(maxsize=None) def fibonacci(n): if nبعد تحسين الكود من خلال الحفظ، قم بتشغيله باستخدام PyPy لمزيد من تحسينات الأداء:
pypy3 fibonacci_script.pyخاتمة
من خلال الاستفادة من cProfile وPyPy، يمكنك تحسين كود Python الخاص بك بشكل كبير. استخدم cProfile لتحديد ومعالجة اختناقات الأداء في التعليمات البرمجية الخاصة بك. ثم استخدم PyPy لزيادة سرعة تنفيذ برنامجك من خلال تجميع JIT.
في ملخص:
- قم بتعريف الكود الخاص بك باستخدام cProfile لفهم اختناقات الأداء.
- تطبيق تقنيات تحسين لغة Python، مثل استخدام العناصر المضمنة والحفظ.
- قم بتشغيل الكود المحسن على PyPy لتحقيق أداء أفضل.
باستخدام هذا الأسلوب، يمكنك جعل برامج Python الخاصة بك تعمل بشكل أسرع وأكثر كفاءة، خاصة بالنسبة للمهام المرتبطة بوحدة المعالجة المركزية.
تواصل معي:
جيثب
لينكد إن
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3