صورة المؤلف
يعد إنشاء ملفات تعريف كود Python مفيدًا لفهم كيفية عمل الكود وتحديد فرص التحسين. من المحتمل أنك قمت بتعريف نصوص بايثون الخاصة بك لـ المقاييس المرتبطة بالوقت- قياس أوقات تنفيذ أقسام محددة من التعليمات البرمجية.
لكن إنشاء ملفات تعريف للذاكرة - لفهم تخصيص الذاكرة وإلغاء تخصيصها أثناء التنفيذ - لا يقل أهمية. لأن ملفات تعريف الذاكرة يمكن أن تساعد في تحديد تسرب الذاكرة، واستخدام الموارد، والمشكلات المحتملة المتعلقة بالقياس.
في هذا البرنامج التعليمي، سنستكشف إنشاء ملفات تعريف كود Python لاستخدام الذاكرة باستخدام حزمة Python ملف تعريف الذاكرة.
لنبدأ بتثبيت حزمة Python لملف تعريف الذاكرة باستخدام النقطة:
pip3 install memory-profiler
ملاحظات: تثبيت ملف تعريف الذاكرة في ملف مخصص بيئة افتراضية للمشروع بدلاً من البيئة العالمية الخاصة بك. سنستخدم أيضًا إمكانيات التخطيط المتاحة في ملف تعريف الذاكرة لتخطيط استخدام الذاكرة، وهو ما يتطلب matplotlib. لذا تأكد من تثبيت matplotlib أيضًا في البيئة الافتراضية للمشروع.
لنقم بإنشاء برنامج نصي بلغة Python (على سبيل المثال main.py) باستخدام وظيفة process_strs
:
- تقوم الوظيفة بإنشاء سلسلتين بايثون طويلتين للغاية
str1
وstr2
ويربط بينهما. - حجة الكلمة الرئيسية
reps
يتحكم في عدد المرات التي سيتم فيها تكرار السلاسل المشفرة لإنشاءهاstr1
وstr2
. ونعطيها القيمة الافتراضية 10**6 والتي سيتم استخدامها إذا كانت الدالة المطلوبة لا تحدد قيمةreps
. - ثم نقوم بحذف صراحة
str2
. - تقوم الدالة بإرجاع السلسلة المتسلسلة
str3
.
# main.py
from memory_profiler import profile
@profile
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
من المفترض أن يمنحك تشغيل البرنامج النصي نتيجة مماثلة:
كما هو موضح في الإخراج، نحن قادرون على رؤية الذاكرة المستخدمة، والزيادة مع كل إنشاء سلسلة لاحقة وخطوة حذف السلسلة لتحرير بعض الذاكرة المستخدمة.
تشغيل الأمر mprof
بدلاً من تشغيل برنامج Python النصي كما هو موضح أعلاه، يمكنك أيضًا تشغيل ملف mprof
الأمر مثل ذلك:
mprof run --python main.py
عند تشغيل هذا الأمر، يجب أن تكون قادرًا أيضًا على رؤية ملف .dat الذي يحتوي على بيانات استخدام الذاكرة. سيكون لديك ملف .dat واحد في كل مرة تقوم فيها بتشغيل الملف mprof
الأمر - يتم تحديده بواسطة الطابع الزمني.
رسم استخدام الذاكرة
في بعض الأحيان يكون من الأسهل تحليل استخدام الذاكرة من قطعة أرض بدلاً من النظر إلى الأرقام. تذكر أننا ناقشنا أن matplotlib هو تبعية مطلوبة لاستخدام إمكانيات التخطيط.
يمكنك استخدام mprof plot
أمر لرسم البيانات في ملف .dat وحفظها في ملف صورة (هنا Output.png):
mprof plot -o output.png
افتراضيا، mprof plot
استخدم البيانات من أحدث تشغيل لـ mprof
أمر.
يمكنك رؤية الطوابع الزمنية المذكورة في المؤامرة أيضًا.
تسجيل ملف تعريف استخدام الذاكرة إلى ملف سجل
وبدلاً من ذلك، يمكنك تسجيل إحصائيات استخدام الذاكرة إلى ملف سجل مفضل في دليل العمل. هنا نقوم بإنشاء معالج الملفات mem_logs
إلى ملف السجل، وقم بتعيين stream
حجة في @profile
الديكور إلى معالج الملف:
# main.py
from memory_profiler import profile
mem_logs = open('mem_profile.log','a')
@profile(stream=mem_logs)
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
عندما تقوم الآن بتشغيل البرنامج النصي، يجب أن تكون قادرًا على رؤية ملف mem_profile.log في دليل العمل الخاص بك بالمحتويات التالية:
يمكنك أيضا استخدام memory_usage()
دالة لفهم الموارد المطلوبة لتنفيذ وظيفة معينة — أخذ عينات منها على فترات زمنية منتظمة.
• memory_usage
تأخذ الوظيفة الوظيفة في ملف التعريف والوسائط الموضعية والكلمات الرئيسية على شكل صف.
هنا، نود أن نجد استخدام الذاكرة لـ process_strs
تعمل مع وسيطة الكلمة الأساسية reps
اضبط على 10**7. قمنا أيضًا بتعيين الفاصل الزمني لأخذ العينات على 0.1 ثانية:
# main.py
from memory_profiler import memory_usage
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
mem_used = memory_usage((process_strs,(),{'reps':10**7}),interval=0.1)
print(mem_used)
إليك الإخراج المقابل:
Output >>>
[21.21875, 21.71875, 147.34375, 277.84375, 173.93359375]
يمكنك أيضًا ضبط الفاصل الزمني لأخذ العينات بناءً على عدد المرات التي تريد فيها التقاط استخدام الذاكرة. على سبيل المثال، قمنا بتعيين الفاصل الزمني إلى 0.01 ثانية؛ وهذا يعني أننا سنحصل الآن على عرض أكثر تفصيلاً للذاكرة المستخدمة.
# main.py
from memory_profiler import memory_usage
def process_strs(reps=10**6):
str1 = 'python'*reps
str2 = 'programmer'*reps
str3 = str1 + str2
del str2
return str3
process_strs(reps=10**7)
mem_used = memory_usage((process_strs,(),{'reps':10**7}),interval=0.01)
print(mem_used)
يجب أن تكون قادرًا على رؤية مخرجات مماثلة:
Output >>>
[21.40234375, 21.90234375, 33.90234375, 46.40234375, 59.77734375, 72.90234375, 85.65234375, 98.40234375, 112.65234375, 127.02734375, 141.27734375, 155.65234375, 169.77734375, 184.02734375, 198.27734375, 212.52734375, 226.65234375, 240.40234375, 253.77734375, 266.52734375, 279.90234375, 293.65234375, 307.40234375, 321.27734375, 227.71875, 174.1171875]
في هذا البرنامج التعليمي، تعلمنا كيفية البدء في تحديد ملفات تعريف البرامج النصية لـ Python لاستخدام الذاكرة.
وعلى وجه التحديد، تعلمنا كيفية القيام بذلك باستخدام حزمة ملف تعريف الذاكرة. استخدمنا @profile
مصمم ديكور و memory_usage()
وظيفة للحصول على استخدام الذاكرة لنموذج البرنامج النصي بيثون. لقد تعلمنا أيضًا كيفية استخدام الإمكانات مثل تخطيط استخدام الذاكرة والتقاط الإحصائيات في ملف سجل.
إذا كنت مهتمًا بتحديد مواصفات نص Python الخاص بك لأوقات التنفيذ، ففكر في القراءة التنميط رمز بايثون باستخدام timeit وcProfile.
بالا بريا سي مطور وكاتب تقني من الهند. تحب العمل في تقاطع الرياضيات والبرمجة وعلوم البيانات وإنشاء المحتوى. تشمل مجالات اهتمامها وخبرتها DevOps وعلوم البيانات ومعالجة اللغة الطبيعية. تستمتع بالقراءة والكتابة والترميز والقهوة! تعمل حاليًا على التعلم ومشاركة معرفتها مع مجتمع المطورين من خلال تأليف برامج تعليمية وأدلة إرشادية ومقالات رأي والمزيد.
- محتوى مدعوم من تحسين محركات البحث وتوزيع العلاقات العامة. تضخيم اليوم.
- PlatoData.Network Vertical Generative Ai. تمكين نفسك. الوصول هنا.
- أفلاطونايستريم. ذكاء Web3. تضخيم المعرفة. الوصول هنا.
- أفلاطون كربون، كلينتك ، الطاقة، بيئة، شمسي، إدارة المخلفات. الوصول هنا.
- أفلاطون هيلث. التكنولوجيا الحيوية وذكاء التجارب السريرية. الوصول هنا.
- المصدر https://www.kdnuggets.com/introduction-to-memory-profiling-in-python?utm_source=rss&utm_medium=rss&utm_campaign=introduction-to-memory-profiling-in-python