profile กับ cProfile ไลบรารีสำหรับรายงานประสิทธิภาพโค้ดโปรแกรมภาษา Python ซึ่งไลบรารีนี้เป็นไลบรารีพื้นฐานของภาษา Python
ในการใช้งานไลบรารีนี้สามารถทำได้สองวิธีคือ
- รัน cProfile ผ่านคอมมานด์ไลน์
- เรียกใช้ไลบรารี profile
วิธีที่ 1 รันผ่านคอมมานด์ไลน์
สำหรับ Python 2
python -m CProfile ไฟล์งาน.py
สำหรับ Python 3
python -m Profile ไฟล์งาน.py
สำหรับผู้ใช้บน Ubuntu/Debian สามารถติดตั้ง Profile ได้โดยใช้คำสั่ง
sudo apt-get install python-profiler #Python 2
sudo apt-get install python-profiler #python 3
แต่ดูยากใช่ไหมครับ มีวิธีการรายงานผลการทดสอบประสิทธิภาพโค้ดโปรแกรมภาษา Python ได้โดยใช้โมดูลที่ชื่อว่า cprofilev ครับ
สามารถติดตั้งได้โดยใช้คำสั่ง pip :
pip install cprofilev
สำหรับผู้ใช้งาน Ubuntu/Debian สามารถใช้คำสั่งติดตั้งโมดูลนี้ได้โดยใช้คำสั่ง
$ sudo pip install cprofilev
การรายงานผลลัพธ์ใช้คำสั่ง
cprofilev ไฟล์งาน.py
เมื่อสั่งแล้วให้เข้าไปที่ http://localhost:4000 จะพบกับหน้ารายงานผลการทดสอบประสิทธิภาพโค้ด Python ออกมาในรูปแบบหน้าเว็บ
วิธีที่ 2 เรียกใช้ไลบรารี profile
ในโค้ด Python สามารถเรียกใช้ profile รายงานประสิทธิภาพ โดยตามตัวอย่างต่อไปนี้ครับ
[python]
>>> import profile
>>> def o():
print("Hi"*5)
>>> profile.run('o()') #เรียกใช้ฟังก์ขั่นหรือคำสั่งเพื่อทำการรายงานประสิทธิภาพของโค้ดโปรแกรม Python
HiHiHiHiHi
98 function calls in 0.016 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
2 0.000 0.000 0.000 0.000 :0(_acquire_restore)
2 0.000 0.000 0.000 0.000 :0(_is_owned)
2 0.000 0.000 0.000 0.000 :0(_release_save)
6 0.000 0.000 0.000 0.000 :0(acquire)
2 0.000 0.000 0.000 0.000 :0(allocate_lock)
2 0.000 0.000 0.000 0.000 :0(append)
2 0.000 0.000 0.000 0.000 :0(dumps)
1 0.000 0.000 0.016 0.016 :0(exec)
2 0.000 0.000 0.000 0.000 :0(get)
4 0.000 0.000 0.000 0.000 :0(get_ident)
4 0.000 0.000 0.000 0.000 :0(isinstance)
6 0.000 0.000 0.000 0.000 :0(len)
2 0.000 0.000 0.000 0.000 :0(pack)
1 0.000 0.000 0.016 0.016 :0(print)
2 0.000 0.000 0.000 0.000 :0(release)
2 0.000 0.000 0.000 0.000 :0(select)
2 0.000 0.000 0.000 0.000 :0(send)
1 0.000 0.000 0.000 0.000 :0(setprofile)
1 0.000 0.000 0.016 0.016 <pyshell#3>:1(o)
1 0.000 0.000 0.016 0.016 <string>:1(<module>)
2 0.000 0.000 0.016 0.008 PyShell.py:1344(write)
1 0.000 0.000 0.016 0.016 profile:0(o())
0 0.000 0.000 profile:0(profiler)
14 0.000 0.000 0.000 0.000 rpc.py:150(debug)
2 0.000 0.000 0.016 0.008 rpc.py:213(remotecall)
2 0.000 0.000 0.000 0.000 rpc.py:223(asynccall)
2 0.000 0.000 0.016 0.008 rpc.py:243(asyncreturn)
2 0.000 0.000 0.000 0.000 rpc.py:249(decoderesponse)
2 0.000 0.000 0.016 0.008 rpc.py:287(getresponse)
2 0.000 0.000 0.000 0.000 rpc.py:295(_proxify)
2 0.000 0.000 0.016 0.008 rpc.py:303(_getresponse)
2 0.000 0.000 0.000 0.000 rpc.py:325(newseq)
2 0.000 0.000 0.000 0.000 rpc.py:329(putmessage)
2 0.000 0.000 0.000 0.000 rpc.py:554(__getattr__)
2 0.000 0.000 0.000 0.000 rpc.py:595(__init__)
2 0.000 0.000 0.016 0.008 rpc.py:600(__call__)
4 0.000 0.000 0.000 0.000 threading.py:1231(current_thread)
2 0.000 0.000 0.000 0.000 threading.py:210(__init__)
2 0.016 0.008 0.016 0.008 threading.py:258(wait)
2 0.000 0.000 0.000 0.000 threading.py:75(RLock)
[/python]
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)