.pyx เป็นไฟล์โค้ดที่จะถูกคอมไพล์ไปเป็นภาษาซีโดย Cython
เราสามารถนำ .pyx มาช่วยเร่งความเร็วการทำงานของโค้ดได้ มีไฟล์ num.py เป็นโปรแกรมหาค่าการบวกของเลขเดียวกันบวกกันตามจำนวนครั้งที่กำหนด (ไม่ใช้การคูณ)
เราต้องการหา 20000 บวกกับ 20000 จำนวน 200000090 ครั้ง จึงรันโค้ดด้วยคำสั่งรันโค้ด Python แบบบรรทัดเดียวด้วยคำสั่ง
$ python -c "import num;print(num.plus(20000,200000090))" 4000001800000
แต่มันใช้เวลาทำงานนานมาก
$ time python -c "import num;print(num.plus(20000,200000090))" 4000001800000 real 0m17.937s user 0m17.828s sys 0m0.004s
มาทดลองใช้ .pyx ของ Cython
หากเราสร้างไฟล์ num.pyx ขึ้นมา โดยไฟล์ num.pyx มีโค้ดเหมือนกับ num.py ขึ้น โดยบันทึกไว้คนละโฟลเดอร์กับ num.py
แล้วรันด้วยคำสั่ง
$ time python -c "import pyximport; pyximport.install();import num;print(num.plus(20000,200000090))" 4000001800000 real 0m10.708s user 0m10.692s sys 0m0.012s
จะเห็นได้ว่า
.pyx
ของ Cython ช่วยเร่งความเร็วโค้ด Python ให้เร็วขึ้นกว่าเดิม โดย pyximport
เป็นโมดูลส่วนหนึ่งของ Cython ที่ช่วยในการ import ไฟล์ .pyx มาใช้งานใน Python โดยมีข้อแม้คือ ต้องเป็นโมดูลหรือโค้ดที่ไม่ต้องการ C libraries หรือการติดตั้งแบบพิเศษส่วนคำสั่ง
pyximport.install()
เป็นคำสั่งติดตั้งระบบ import ไฟล์ .pyxหากผู้อ่านไม่ต้องการเปลี่ยนนามสกุลจากไฟล์ .py มาเป็น .pyx ก็สามารถใช้ pyximport ช่วยเร่งความเร็วของโค้ดได้โดยวาง pyimport = True ใน pyximport.install() เพราะตั้งแต่ Cython 0.11 เป็นต้นมา pyximport รองรับการทำงานทั้งจากไฟล์ .py และ .pyx
ก่อนใช้งานต้องวางโค้ดก่อน import โมดูลเข้ามา
import pyximport
pyximport.install(pyimport = True)
import โมดูล
เพียงเท่านี้ความเร็วโค้ด Python ก็เร็วขึ้นแล้ว
นอกจากนั้น คุณสามารถนำ .pyx ของ Cython ไปทำเป็นโมดูลได้ โดยคุณต้องสร้างไฟล์ setup.py
ตัวอย่างเช่น เราต้องการทำโมดูล num โดยใช้ไฟล์ num.pyx
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("num.pyx")
)
เมื่อต้องการติดตั้งให้ใช้คำสั่ง
$ python setup.py build_ext --inplace
อ่านเอกสารเพิ่มเติมได้ที่ http://cython.readthedocs.io/en/latest/index.html
ติดตามบทความต่อไปนะครับ
ขอบคุณครับ
0 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)