Skip to content

รายงานประสิทธิภาพโค้ดโปรแกรมภาษา Python ด้วย profile , cProfile

สวัสดีครับทุกท่าน ในการเขียนโปรแกรม เมื่อเราเขียนโปรแกรมาโปรแกรมหนึ่ง เราต้องมีการทดสอบโปรแกรมเพื่อแก้ไข ปรับปรุง จึงต้องมีการวัดประสิทธิภาพโปรแกรม เพื่อนำไปแก้ไขปรับปรุงให้โปรแกรมทำงานได้อย่างรวดเร็วขึ้น บทความนี้จะพาผู้อ่านไปทำรายงานประสิทธิภาพโค้ดโปรแกรมภาษา Python ด้วย profile , cProfile กันครับ

profile กับ cProfile ไลบรารีสำหรับรายงานประสิทธิภาพโค้ดโปรแกรมภาษา Python ซึ่งไลบรารีนี้เป็นไลบรารีพื้นฐานของภาษา Python
ในการใช้งานไลบรารีนี้สามารถทำได้สองวิธีคือ

  1. รัน cProfile ผ่านคอมมาไลน์
  2. เรียกใช้ไลบรารี 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 รายงานประสิทธิภาพ โดยตามตัวอย่างต่อไปนี้ครับ

>>> 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)

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องที่ต้องการถูกทำเครื่องหมาย *