توجه إلى https://vmprof.readthedocs.org لمزيد من المعلومات!
pip install vmprof
python -m vmprof <your program> <your program args>
يقوم نظام البناء الخاص بنا بشحن العجلات إلى PyPI (Linux وMac OS X). إذا قمت بالإنشاء من المصدر، فأنت بحاجة إلى تثبيت رؤوس تطوير CPython ورؤوس libunwind (على Linux فقط). على نظام التشغيل Windows، يعني هذا أنك بحاجة إلى برنامج Microsoft Visual C++ Compiler لإصدار Python الخاص بك.
يمكن إجراء إعداد التطوير باستخدام الأوامر التالية:
$ virtualenv -p /usr/bin/python3 vmprof3
$ source vmprof3/bin/activate
$ python setup.py develop
تحتاج إلى تثبيت حزم تطوير بايثون. في حالة Debian أو Ubuntu، فإن الحزمة التي تحتاجها هي python3-dev
و libunwind-dev
. حان الوقت الآن لكتابة اختبار وتنفيذ ميزتك. إذا كنت تريد أن تؤثر تغييراتك على vmprof.com، فانتقل إلى https://github.com/vmprof/vmprof-server واتبع تعليمات الإعداد.
راجع قسم التطوير لدينا على https://vmprof.readthedocs.org لمزيد من المعلومات.
vmprofshow
هي أداة سطر أوامر تأتي مع VMProf . يمكنه قراءة ملفات التعريف وإنتاج مخرجات منسقة.
فيما يلي مثال لكيفية استخدام vmprofshow
:
قم بتشغيل هذا البرنامج الصغير الذي يحرق دورات وحدة المعالجة المركزية (مع تمكين vmprof):
$ pypy vmprof/test/cpuburn.py # you can find cpuburn.py in the vmprof-python repo
سيؤدي هذا إلى إنشاء ملف تعريف vmprof_cpuburn.dat
. الآن قم بعرض ملف التعريف باستخدام vmprofshow
. يحتوي vmprofshow
على أوضاع متعددة لعرض البيانات. سنبدأ بالوضع القائم على الشجرة.
$ vmprofshow vmprof_cpuburn.dat tree
سترى الإخراج (الملون):
$ vmprofshow vmprof_cpuburn.dat tree
100.0% <module> 100.0% tests/cpuburn.py:1
100.0% .. test 100.0% tests/cpuburn.py:35
100.0% .... burn 100.0% tests/cpuburn.py:26
99.2% ...... _iterate 99.2% tests/cpuburn.py:19
97.7% ........ _iterate 98.5% tests/cpuburn.py:19
22.9% .......... _next_rand 23.5% tests/cpuburn.py:14
22.9% ............ JIT code 100.0% 0x7fa7dba57a10
74.7% .......... JIT code 76.4% 0x7fa7dba57a10
0.1% .......... JIT code 0.1% 0x7fa7dba583b0
0.5% ........ _next_rand 0.5% tests/cpuburn.py:14
0.0% ........ JIT code 0.0% 0x7fa7dba583b0
يوجد أيضًا خيار --html
لإصدار نفس المعلومات مثل HTML لعرضها في المتصفح. في هذه الحالة، يمكن توسيع فروع الشجرة وانهيارها بشكل تفاعلي.
يدعم vmprof وضع تحديد مواصفات الخط، والذي يتيح جمع وعرض الإحصائيات الخاصة بالخطوط المنفصلة داخل الوظائف.
لتمكين مجموعة إحصائيات الأسطر، قم بإضافة وسيطة --lines
إلى vmprof:
$ python -m vmprof --lines -o < output-file > < your program > < your program args >
أو قم بتمرير lines=True
إلى الدالة vmprof.enable
، عند استدعاء vmprof من التعليمات البرمجية.
لرؤية إحصائيات الخط لجميع الوظائف، استخدم وضع lines
في vmprofshow
:
$ vmprofshow < output-file > lines
لرؤية إحصائيات السطر لوظيفة معينة، استخدم الوسيطة --filter
مع اسم الوظيفة:
$ vmprofshow < output-file > lines --filter < function-name >
سترى النتيجة:
$ vmprofshow vmprof_cpuburn.dat lines --filter _next_rand
Total hits: 1170 s
File: tests/cpuburn.py
Function: _next_rand at line 14
Line # Hits % Hits Line Contents
=======================================
14 38 3.2 def _next_rand(self):
15 # http://rosettacode.org/wiki/Linear_congruential_generator
16 835 71.4 self._rand = (1103515245 * self._rand + 12345) & 0x7fffffff
17 297 25.4 return self._rand
يحتوي vmprofshow
أيضًا على الوضع flat
.
في حين أن أنماط الإخراج المستندة إلى الشجرة والقائمة على الخط لـ vmprofshow
توفر رؤية جيدة للمكان الذي يقضيه الوقت عند عرضه من "جذر" الرسم البياني للاتصال، فمن المستحسن أحيانًا الحصول على عرض من "الأوراق" بدلاً من ذلك. يعد هذا مفيدًا بشكل خاص عند وجود وظائف يتم استدعاؤها من أماكن متعددة، حيث لا يستهلك كل استدعاء الكثير من الوقت، ولكن جميع الاستدعاءات مجتمعة تصل إلى تكلفة كبيرة.
$ vmprofshow vmprof_cpuburn.dat flat andreask_work@dunkel 15:24
28.895% - _PyFunction_Vectorcall:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/call.c:389
18.076% - _iterate:cpuburn.py:20
17.298% - _next_rand:cpuburn.py:15
5.863% - <native symbol 0x563a5f4eea51>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/longobject.c:3707
5.831% - PyObject_SetAttr:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/object.c:1031
4.924% - <native symbol 0x563a5f43fc01>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:787
4.762% - PyObject_GetAttr:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/object.c:931
4.373% - <native symbol 0x563a5f457eb1>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:1071
3.758% - PyNumber_Add:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:957
3.110% - <native symbol 0x563a5f47c291>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/longobject.c:4848
1.587% - PyNumber_Multiply:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:988
1.166% - _PyObject_GetMethod:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/object.c:1139
0.356% - <native symbol 0x563a5f4ed8f1>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/longobject.c:3432
0.000% - <native symbol 0x7f0dce8cca80>:-:0
0.000% - test:cpuburn.py:36
0.000% - burn:cpuburn.py:27
في بعض الأحيان قد يكون من المرغوب فيه استبعاد الوظائف "الأصلية":
$ vmprofshow vmprof_cpuburn.dat flat --no-native andreask_work@dunkel 15:27
53.191% - _next_rand:cpuburn.py:15
46.809% - _iterate:cpuburn.py:20
0.000% - test:cpuburn.py:36
0.000% - burn:cpuburn.py:27
لاحظ أن الإخراج يمثل الوقت المستغرق في كل وظيفة، باستثناء الوظائف التي تم استدعاؤها. (في الوضع --no-native
، يظل المتصلون بالرمز الأصلي مدرجين في الإجمالي.)
في بعض الأحيان قد يكون من المرغوب أيضًا الحصول على توقيتات تتضمن وظائف تسمى:
$ vmprofshow vmprof_cpuburn.dat flat --include-callees andreask_work@dunkel 15:31
100.000% - <native symbol 0x7f0dce8cca80>:-:0
100.000% - test:cpuburn.py:36
100.000% - burn:cpuburn.py:27
100.000% - _iterate:cpuburn.py:20
53.191% - _next_rand:cpuburn.py:15
28.895% - _PyFunction_Vectorcall:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/call.c:389
7.807% - PyNumber_Multiply:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:988
7.483% - <native symbol 0x563a5f457eb1>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:1071
6.220% - <native symbol 0x563a5f4eea51>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/longobject.c:3707
5.831% - PyObject_SetAttr:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/object.c:1031
4.924% - <native symbol 0x563a5f43fc01>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:787
4.762% - PyObject_GetAttr:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/object.c:931
3.758% - PyNumber_Add:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/abstract.c:957
3.110% - <native symbol 0x563a5f47c291>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/longobject.c:4848
1.166% - _PyObject_GetMethod:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/object.c:1139
0.356% - <native symbol 0x563a5f4ed8f1>:/home/conda/feedstock_root/build_artifacts/python-split_1608956461873/work/Objects/longobject.c:3432
هذا العرض مشابه تمامًا لعرض "الشجرة"، بدون التداخل.