Kunjungi https://vmprof.readthedocs.org untuk info lebih lanjut!
pip install vmprof
python -m vmprof <your program> <your program args>
Sistem pembangunan kami mengirimkan roda ke PyPI (Linux, Mac OS X). Jika Anda membangun dari sumber, Anda perlu menginstal header pengembangan CPython dan header libunwind (hanya di Linux). Di Windows, ini berarti Anda memerlukan Microsoft Visual C++ Compiler untuk versi Python Anda.
Menyiapkan pengembangan dapat dilakukan dengan menggunakan perintah berikut:
$ virtualenv -p /usr/bin/python3 vmprof3
$ source vmprof3/bin/activate
$ python setup.py develop
Anda perlu menginstal paket pengembangan python. Misalnya Debian atau Ubuntu, paket yang Anda perlukan adalah python3-dev
dan libunwind-dev
. Sekarang saatnya menulis tes dan mengimplementasikan fitur Anda. Jika Anda ingin perubahan Anda memengaruhi vmprof.com, kunjungi https://github.com/vmprof/vmprof-server dan ikuti petunjuk penyiapan.
Lihat bagian pengembangan kami di https://vmprof.readthedocs.org untuk informasi lebih lanjut.
vmprofshow
adalah alat baris perintah yang disertakan dengan VMProf . Itu dapat membaca file profil dan menghasilkan output yang diformat.
Berikut ini contoh cara menggunakan vmprofshow
:
Jalankan program bertubuh kecil yang membakar siklus CPU (dengan vmprof diaktifkan):
$ pypy vmprof/test/cpuburn.py # you can find cpuburn.py in the vmprof-python repo
Ini akan menghasilkan file profil vmprof_cpuburn.dat
. Sekarang tampilkan profil menggunakan vmprofshow
. vmprofshow
memiliki beberapa mode menampilkan data. Kita akan mulai dengan mode berbasis pohon.
$ vmprofshow vmprof_cpuburn.dat tree
Anda akan melihat keluaran (berwarna):
$ 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
Ada juga opsi --html
untuk mengeluarkan informasi yang sama seperti HTML untuk dilihat di browser. Dalam hal ini, cabang-cabang pohon dapat diperluas dan diciutkan secara interaktif.
vmprof mendukung mode pembuatan profil garis, yang memungkinkan pengumpulan dan menampilkan statistik untuk garis terpisah di dalam fungsi.
Untuk mengaktifkan pengumpulan statistik garis, tambahkan argumen --lines
ke vmprof:
$ python -m vmprof --lines -o < output-file > < your program > < your program args >
Atau berikan argumen lines=True
ke fungsi vmprof.enable
, saat memanggil vmprof dari kode.
Untuk melihat statistik garis untuk semua fungsi gunakan mode lines
vmprofshow
:
$ vmprofshow < output-file > lines
Untuk melihat statistik garis untuk fungsi tertentu gunakan argumen --filter
dengan nama fungsi:
$ vmprofshow < output-file > lines --filter < function-name >
Anda akan melihat hasilnya:
$ 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
juga memiliki mode flat
.
Meskipun gaya keluaran berbasis pohon dan berbasis garis untuk vmprofshow
memberikan gambaran yang baik tentang waktu yang dihabiskan jika dilihat dari 'akar' grafik panggilan, terkadang lebih baik mendapatkan tampilan dari 'daun'. Hal ini sangat berguna ketika ada fungsi yang dipanggil dari beberapa tempat, di mana setiap pemanggilan tidak memakan banyak waktu, namun semua pemanggilan yang dilakukan secara bersamaan memerlukan biaya yang besar.
$ 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
Kadang-kadang mungkin diinginkan untuk mengecualikan fungsi "asli":
$ 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
Perhatikan bahwa output mewakili waktu yang dihabiskan di setiap fungsi, tidak termasuk fungsi yang dipanggil. (Dalam mode --no-native
, orang yang dipanggil dengan kode asli tetap disertakan dalam total.)
Kadang-kadang mungkin juga diinginkan untuk memasukkan pengaturan waktu ke fungsi-fungsi yang dipanggil:
$ 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
Tampilan ini sangat mirip dengan tampilan "pohon", kecuali tampilan sarangnya.