¡حولا! نحن نواصل سلسلة من المنشورات المخصصة لإطلاق الدورة التدريبية
"مطور الويب في بيثون" ، ونحن الآن نشارك معك ترجمة مقال آخر مثير للاهتمام.
في Zendesk ، نستخدم Python لإنشاء منتجات تعلم الآلة. في تطبيقات التعلم الآلي ، واحدة من أكثر المشاكل شيوعًا التي واجهناها هي تسرب الذاكرة والارتفاعات. عادةً ما يتم تنفيذ Python code في حاويات باستخدام أطر معالجة موزعة مثل
Hadoop و
Spark و
AWS Batch . يتم تخصيص مقدار ثابت من كل حاوية. بمجرد أن يتجاوز تنفيذ التعليمات البرمجية الحد المحدد للذاكرة ، ستتوقف الحاوية عن العمل بسبب الأخطاء التي تحدث بسبب نقص الذاكرة.

يمكنك حل المشكلة بسرعة عن طريق تخصيص ذاكرة أكثر. ومع ذلك ، يمكن أن يؤدي ذلك إلى إهدار الموارد والتأثير على استقرار التطبيقات بسبب رشقات لا يمكن التنبؤ بها من الذاكرة. يمكن أن تكون أسباب حدوث تسرب للذاكرة
كما يلي :
- تخزين طويل للكائنات الكبيرة التي لم يتم حذفها ؛
- روابط الاسترجاع في الكود ؛
- مكتبات / ملحقات Base C تؤدي إلى تسرب الذاكرة ؛
من الممارسات الجيدة تحديد استخدام الذاكرة مع التطبيقات للحصول على فهم أفضل لكفاءة مساحة الرمز والحزم المستخدمة.
تتناول هذه المقالة الجوانب التالية:
- التنميط استخدام ذاكرة التطبيق مع مرور الوقت ؛
- كيفية التحقق من استخدام الذاكرة في جزء معين من البرنامج ؛
- نصائح لتصحيح الأخطاء الناجمة عن مشاكل الذاكرة.
التنميط الذاكرة مع مرور الوقتيمكنك إلقاء نظرة على استخدام الذاكرة المتغيرة أثناء تنفيذ برنامج Python باستخدام حزمة
منشئ ملفات الذاكرة .
الشكل أ. تشكيل ملفات الذاكرة كدالة للوقتيتيح
خيار التضمين استخدام الذاكرة من قبل أي عمليات فرعية ناتجة عن عمليات الأصل. يعكس الشكل "أ" عملية التعلم التكراري ، والتي تؤدي إلى زيادة الذاكرة في الدورات في تلك اللحظات التي تتم فيها معالجة حزم بيانات التدريب. يتم حذف الكائنات أثناء جمع البيانات المهملة.
إذا كان استخدام الذاكرة يزداد باستمرار ، فإن هذا يعتبر تهديدًا محتملًا لتسرب الذاكرة.
إليك نموذج التعليمات البرمجية الذي يعكس هذا:
الشكل B. زيادة استخدام الذاكرة مع مرور الوقتيجب عليك تعيين نقاط التوقف في مصحح الأخطاء بمجرد أن يتجاوز استخدام الذاكرة عتبة معينة. للقيام بذلك ، يمكنك استخدام
المعلمة pdb-mmem ، وهو مناسب أثناء استكشاف الأخطاء وإصلاحها.
تفريغ الذاكرة في وقت معينمن المفيد تقدير العدد المتوقع مسبقًا من الكائنات الكبيرة في البرنامج وما إذا كان ينبغي تكرارها و / أو تحويلها إلى تنسيقات مختلفة.
لمزيد من التحليل للكائنات في الذاكرة ، يمكنك إنشاء كومة تفريغ في أسطر معينة من البرنامج باستخدام
muppy .
الشكل C. عينة تفريغ تفريغ كومة الذاكرة المؤقتةمكتبة ملفات تعريف مفيدة أخرى هي
objgraph ، والتي تتيح لك إنشاء رسوم بيانية للتحقق من أصل الكائنات.
مؤشرات مفيدةتتمثل الطريقة المفيدة في إنشاء "حالة اختبار" صغيرة تعمل على تشغيل الكود المناسب الذي يؤدي إلى حدوث تسرب للذاكرة. فكر في استخدام مجموعة فرعية من البيانات المحددة عشوائيًا إذا كانت المدخلات الكاملة ستستغرق وقتًا طويلاً للمعالجة.
أداء المهام مع تحميل ذاكرة عالية في عملية منفصلةبيثون لا يحرر بالضرورة الذاكرة على الفور لنظام التشغيل. للتأكد من تحرير الذاكرة ، يجب عليك بدء عملية منفصلة بعد تنفيذ جزء من التعليمات البرمجية. يمكنك معرفة المزيد عن جامع القمامة في بيثون
هنا .
يمكن المصحح إضافة مراجع إلى الكائنات.إذا كنت تستخدم مصحح أخطاء نقطة توقف مثل
pdb ،
فستظل جميع الكائنات التي تم إنشاؤها والتي يتم الرجوع إليها يدويًا بواسطة مصحح الأخطاء في الذاكرة. هذا يمكن أن يخلق إحساس خاطئ تسرب الذاكرة ، لأنه لا يتم حذف الكائنات في الوقت المناسب.
احذر الحزم التي قد تسبب تسرب الذاكرة.يمكن أن تتسبب بعض المكتبات في Python في حدوث تسرب ، على سبيل المثال تعاني
pandas
العديد من مشكلات
تسرب الذاكرة المعروفة.
هل لديك مطاردة لطيفة للتسريبات!
روابط مفيدة:docs.python.org/3/c-api/memory.htmldocs.python.org/3/library/debug.htmlاكتب التعليقات إذا كانت هذه المقالة مفيدة لك. وأولئك الذين يرغبون في معرفة المزيد عن دورتنا ، ندعوك
لفتح يوم ، والذي سيعقد في 22 أبريل.