ไปที่ 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
:
เรียกใช้โปรแกรมขนาดเล็กที่เบิร์นรอบ CPU (โดยเปิดใช้งาน 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
มุมมองนี้ค่อนข้างคล้ายกับมุมมอง "ต้นไม้" ลบการซ้อน