ความเร็วของ Python เมื่อคอมไพล์แล้ว

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

ความเร็วของ Python เมื่อคอมไพล์เป็น .exe แล้ว ความเร็วที่ได้เป็นอย่างไรเมื่อเทียบกับ C หรือ VB ครับ

sugree's picture

แพ้เห็นๆ การแปลงเป็น exe ของ python เป็นแค่รวม dll pyd pyc และอื่นๆ เข้าด้วยกันเป็น zip แล้วใส่ self extracted stub เข้าไปข้างหน้าให้ขยาย zip เท่าที่จำเป็น แค่นั้น... แทนที่จะเร็วขึ้นกลับช้าลงซะอีก

ที่ผมจะเขียนไมเกี่ยวกับการคอมไพล์ Python ครับ แต่เป็นเรื่องของการ Optimize ความเร็วของ Python เพราะเข้าใจว่าที่อยากคอมไพล์ เพราะอยากได้ความเร็วเพิ่ม

หากเป็นโปรแกรมที่เกี่ยวกับ String ไม่ต้องทำอะไรเลยครับ เพราะ Python เร็วมากอยู่แล้ว บางโปรแกรมอาจเร็วกว่า C หรือ VB ด้วยซ้ำ

หากเป็นการคำนวนแนะนำให้ใช้ numpy ครับ แต่ต้องพยายามเลี่ยง for loop โปรแกรมที่ได้ช้ากว่า C ประมาณ20-50%

หากเป็นการคำนวนที่เลี่ยง for loop ไม่ได้ อาจต้องใช้ swig, f2py หรือ pyrex แต่วิธีนี้ค่อนข้างยุ่งยาก หากเรื่องความเร็วไม่ใช่เรื่องสำคัญมาก ก็ควรเลี่ยงครับ จากที่เคยเขียนโปรแกรมมา ประมาณ 80% ของโปรแกรมสามารถเลี่ยง for loop ได้

ขอบคุณทั้งสองท่านครับ
-------------------------
คุณโบว์ครับ biolawcom.de นิ่งๆ ไปสองสัปดาห์แล้ว รออ่านอยู่นะครับ อาทิตย์ที่แล้วเห็นเพิ่มขึ้นมาบทความหนึ่ง แล้วก็เหมือนถูกลบไป ...

แล้วถ้าเขียนด้วย IronPython เสร็จแล้ว compile เป็น .net binary เลยล่ะ ? (ว่าจะลองอยู่ แต่ยังไม่มีเวลาเลย)

ในทำนองเดียวกัน ถ้าใช้ Jython แล้ว compile เป็น Java class ล่ะครับ

sugree's picture

ตามหลักการก็ควรจะเร็วเท่า .net อาจจะมีช้าลงบ้างถ้ามีการแอบแทรก wrapper ส่วน Jython นี่ช้าเป็นปกติครับ

ตามข้อมูลของ Programming Language Benchmarks พวก IronPython หรือ Jython จะช้ากันเข้าไปอีกครับ ผมบอกสาเหตุที่แน่ชัดไม่ได้ แต่เดาว่า IronPython หรือ Jython ไปเอาโค้ดของ CPython มา แล้วแทนที่จะเขียนด้วย C ก็ใช้ C# หรือ Java เขียนตัว Interpreter ก้บ Library ต่าง ๆ แทน

แต่โดยส่วนตัว ผมคิดว่าเรื่องความเร็วมันขึ้นอยู่กับงานมากกว่าครับ อย่างเช่น โปรแกรมนึงเขียนด้วย C ทำงาน 0.001 วินาที แต่หากเขียนด้วย Python ใช้เวลา 0.1 วินาที ต่างกันร้อยเท่าก็จริง แต่คนใช้ไม่เห็นความต่าง ในกรณีนี้ต้องบอกว่าสองโปรแกรมเร็วเท่ากัน แต่หากโปรแกรมไหนที่ใช้เวลาทำงานเกิน 3 วินาที ผมก็ต้องมานั่ง Optimize ความเร็วเหมือนกัน

ขอเสริมด้วยนิดนึง

ขอเลือกตอบเฉพาะจากหัวข้อเรื่อง(ซึ่งไม่รวมรายละเอียดข้างในที่ระบุถึงการทำ Package เป็น exe นะครับ)
การ Compile เป็น Python Byte Code ว่ากันว่าก็ช่วยเพิ่มความเร็วให้กับโปรแกรมประมาณ 20% (ตัวเลขที่จำมาจากการอ่าน ซึ่งจำไม่ได้ว่าอ่านมาจากไหน = อ้างอิงมากไม่ได้)

แต่ทั้งนี้ทั้งนั้น มันส่งผลอย่างเห็นได้ชัดกับเฉพาะในขั้นตอนของการเริ่มเรียกใช้งานโปรแกรมเท่านั้น
เพราะการ Compile เป็น Byte Code ก็เพียงลดทอนขั้นตอนของการทำ Initial Compile ไปเท่านั้น

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น