วันนี้ผมเอาหลายเสี้ยววินาที (milliseconds) ออกจากเวลาที่ MemeExpress ใช้ในการประมวลผลครับ

ก่อนหน้านี้ผมกล่าวถึง Code Optimization ว่าเป็นงานที่อาศัยทักษะที่ต้องฝึกฝนกันตลอดชีวิต เหมือนการวาดรูปหรือการเล่นดนตรี และนี่คือสาเหตุที่ผมเห็นว่าการพัฒนาโปรแกรมจะถือได้ว่าเป็นงานศิลปะประเภทหนึ่งได้ แต่อย่าเชื่อผมครับ ถ้าคุณอยากรู้แน่นอนว่าได้หรือไม่ได้จริงๆ ผมแนะนำให้ไปอ่าน The Art of Computer Programming โดย Prof. Donald E. Knuth อ่านครบทั้งสามเล่มคุณน่าจะได้คำตอบ แต่ถ้าไม่ได้คำตอบก็ได้หลับครับ เพราะมันหนาอ่านแล้วหลับสบาย

กลับมาเรื่อง Code Optimization ต่อ ว่าแล้ววันนี้ผมก็ฝึกปรือกำลังภายในว่าด้วยการ optimize code ต่อโดยการเอาสักหลายเสี้ยววินาทีออกจาก MemeExpress เพื่อให้ทำงานเร็วขึ้นหน่อย แต่การจะไปค้นหาจุดที่ใช้เวลาประมวลผลมากด้วยมือ (manually) นั้น มันก็เสียเวลาเหลือเกิน อย่ากระนั้นเลยใช้เครื่องมือช่วยดีกว่า

สำหรับโปรแกรมที่เขียนด้วย Python แล้ว เครื่องมือในการวิเคราะห์การทำงานของ code ก็ไม่ต้องไปหาที่ไหนไกล เพราะมันมาพร้อมกับ Python Distribution อยู่แล้ว เครื่องมือนั้นได้แก่ Python Profiler

วิธีการใช้งาน Python Profiler ก็ไม่ยากเย็น เริ่มจากคุณ

import profiler

แล้วใช้

profile.run('yourcode()')

เพียงแค่นี้ Python Profiler ก็จะแสดงสถิติของการทำงานของ code ของคุณมาให้ดู ถ้าคุณอยากดูมากกว่านี้ต้องใช้

profile.run('yourcode()', '/tmp/yourstatfile')

เพื่อเก็บ profile data ไปที่ /tmp/yourstatfile แล้ว

import pstats
statobj = pstats.Stats('/tmp/yourstatfile')

คราวนี้คุณก็ได้ statobj ที่สามารถปรับแต่งให้แสดงผลการทำงานของ code คุณในรูปแบบต่างๆ ได้แล้ว สมมติว่าจะให้แสดง 10% ของ code ที่ใช้เวลาทำงานเยอะที่สุดก็

statobj.sort_stats('time')
statobj.print_stats(.1)

เท่านี้เราก็สามารถหาเป้าหมายของ code ที่ทำงานช้าและเราต้องไป optimize ได้แล้วครับ ถ้าคุณอยากรู้เพิ่มเติ่มเกี่ยวกับ Python Profiler ก็ไม่ต้องหาที่ไหนไกลเริ่มต้นได้ที่ Python Library Reference บทที่ 10 ว่าด้วย The Python Profiler นั่นเอง