18 มกราคม 2558

Published มกราคม 18, 2558 by with 0 comment

PyPy เร่งความเร็วโค้ด Python

โลโก้โครงการ pypy

PyPy เป็นโครงการหนึ่งที่ต้องการเร่งความเร็วโค้ดโปรแกรมของ Python  ปกติแล้ว Python จะใช้ CPython แต่ Python เป็นภาษาสคริปต์ เมื่อนำไปรันจะต้องมีการนำไป Interpreter แปลโปรแกรมแต่ละบรรทัดเป็นภาษาเครื่องอยู่ดี
ทำให้ภาษา Python ช้ากว่าภาษาที่เป็น Compiler เช่น ภาษา C เป็นต้น
ทำให้มีนักพัฒนาภายนอกได้สร้าง PyPy ขึ้นมา โดยใช้ JIT compiler เข้ามาช่วย ทำให้ได้ความเร็วขึ้นขึ้น เราสามารถนำโค้ด Python ไปรันได้เลย โดยไม่ต้องเขียนโค้ดใหม่
แต่มีหลายโมดูลที่ไม่รองรับการทำงานบน PyPy  เช่น OpenCV เป็นต้น รองรับเฉพาะ CPython แนะนำให้ทำการตรวจสอบจากหน้าเว็บนักพัฒนาโมดูลนั้นครับ

ปัจจุบันนี้ PyPy รองรับทั้ง Python 2 , Python 3 โดย PyPy มี 2 รุ่นดังนี้

  • PyPy เป็นรุ่นสำหรับ Python 2

  • PyPy3 เป็นรุ่นสำหรับ Python 3

สามารถโหลดได้ที่ http://www.pypy.org/download.html
ผมจะพาผู้อ่านไปใช้ PyPy กันครับ

วิธีการติดตั้ง PyPy


วิธีการติดตั้งนี้ใช้ได้ทั้ง PyPy และ PyPy3 ครับ

วิธีการติดตั้ง PyPy สำหรับ Windows

เข้าไปที่ http://www.pypy.org/download.html แล้วเลือกหาเวชั่น PyPy ที่ต้องการแล้วคลิก Windows binary (32bit) จะได้ไฟล์ซิป ตัวอย่างเช่น pypy3-2.4.0-win32.zip

เมื่อได้ไฟล์แล้วให้ทำการแตกไฟล์ซิป แล้วเปิดคอมมานด์ไลน์เข้าไปยังโฟลเดอร์ที่เก็บไฟล์ซิปแล้วเข้าไปยังโฟลเดอร์ที่แตกไฟล์ซิป แล้วเข้าไปยังโฟลเดอร์ pypy อีกรอบหนึ่ง แล้วสั่ง pypy.exe

ตัวอย่างเช่น ผมแตกไฟล์ pypy3-2.4.0-win32.zip ไว้ที่ไดร์ว C จะได้ pypy3-2.4.0-win32 และข้างในจะมี pypy3-2.4.0-win32 อีกทอดหนึ่ง ผมเปิดคอมมานด์ไลน์ใช้คำสั่ง
>cd C:\pypy3-2.4.0-win32\pypy3-2.4.0-win32

>pypy.exe

Python 3.2.5 (b2091e973da6, Oct 19 2014, 21:25:51)
[PyPy 2.4.0 with MSC v.1500 32 bit] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>>

เพื่อให้เรียกใช้งานได้สะดวกยิ่งขึ้น ให้ set path ตามนี้ครับ

  1. เข้าไปที่ My Computer คลิก Advanced System Settings

  2. แล้วคลิก Environment Variables

  3. เพิ่ม ;C:\pypy3-2.4.0-win32\pypy3-2.4.0-win32 ไปยังค่า path

  4. แล้วคลิกตกลง

วิธีการติดตั้ง PyPy สำหรับลินุกซ์

ให้เข้าไปที่ http://www.pypy.org/download.html แล้วเลือกหาเวชั่น PyPy แล้วเลือกไฟล์ตามระบบ เช่น

  • Linux x86 binary

  • Linux x86-64 binary

คัดลอกที่ตั้งไฟล์ แล้วเปิดคอมมานด์ไลน์สั่ง
mkdir $HOME/tarballs
cd $HOME/tarballs
wget ลิงค์ที่ตั้งไฟล์ที่ต้องการ
cd $HOME
tar xvjf tarballs/ชื่อไฟล์ที่โหลด.tar.bz2

ตัวอย่างเช่น
mkdir $HOME/tarballs
cd $HOME/tarballs
wget https://bitbucket.org/pypy/pypy/downloads/pypy3-2.4.0-linux.tar.bz2
cd $HOME
tar xvjf tarballs/pypy3-2.4.0-linux.tar.bz2

แล้วเรียกใช้งานด้วยคำสั่ง
./ชื่อโฟลเดอร์ที่แตกไฟล์จากซิป/bin/pypy

ตัวอย่างเช่น
./pypy3-2.4.0-linux/bin/pypy

เพื่อให้เรียกใช้งานสะดวกยิ่งขึ้น สามารถตั้งค่า path ได้ดังนี้ครับ ใช้คำสั่ง
echo "export PATH=\${HOME}/ชื่อโฟลเดอร์ที่แตกไฟล์จากซิป/bin:\${PATH}" >> ~/.profile
echo "export LD_LIBRARY_PATH=\${HOME}/ชื่อโฟลเดอร์ที่แตกไฟล์จากซิป/lib:\${LD_LIBRARY_PATH}" >> ~/.profile
source ~/.profile

ตัวอย่างเช่น
echo "export PATH=\${HOME}/pypy3-2.4.0-linux/bin:\${PATH}" >> ~/.profile
echo "export LD_LIBRARY_PATH=\${HOME}/pypy3-2.4.0-linux/lib:\${LD_LIBRARY_PATH}" >> ~/.profile
source ~/.profile

แล้วลองเรียกใช้งาน pypy ดูครับ

วิธีการติดตั้ง PyPy สำหรับ Mac OS

เข้าไปที่ http://www.pypy.org/download.html แล้วเลือกหาเวชั่น PyPy แล้วเลือกไฟล์

Mac OS/X binary (64bit)

ให้ทำการโหลดไฟล์มาไว้ที่เครื่องแล้วทำการแตกไฟล์ซิป เสร็จเปิดคอมมานด์ไลน์เปิดไปยังโฟลเดอร์ที่แตกไฟล์แล้วสั่ง
./ชื่อโฟลเดอร์ที่แตกไฟล์จากซิป/bin/pypy

ตัวอย่างเช่น
$ ./pypy-2.2.1-osx64/bin/pypy

สำหรับการ set path ทำด้งนี้ครับ

เพิ่มเข้าไปยัง $HOME/.profile:
export PATH=$HOME/pypy-2.2.1-osx64/bin:${PATH}

แล้วสั่ง
source $HOME/.profile

ออกจากระบบแล้วเข้าระบบใหม่ ลองสั่ง pypy ดูครับ

ผมได้แนะนำวิธีการติดตั้ง PyPy ไปเรียบร้อยแล้ว แต่ PyPy ไม่ได้มี pip มาด้วย เราจึงต้องติดตั้ง pip ลง PyPy ดังนี้ครับ

สำหรับ Windows

ให้โหลดไฟล์ get-pip.py จาก https://bootstrap.pypa.io/get-pip.py แล้ว เปิดคอมมานด์ไลน์เข้าไปยังโฟลเดอร์ที่เก็บไฟล์ get-pip.py แล้วสั่ง
pypy get-pip.py

สำหรับลินุกซ์และ Mac OS

เปิดคอมมานด์ไลน์แล้วสั่ง
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ pypy get-pip.py
$ pypy pip install pygments  #ตัวอย่าง

เวลาจะรันโค้ดจากไฟล์ py สามารถรันได้ง่าย ๆ เปลี่ยนจาก
python ไฟล์.py

ไปเป็น
pypy ไฟล์.py

หากต้องการปิด JIT compiler (การปิด JIT compiler เหมาะกับงานที่ไม่มีการ loop ซ้ำหลาย ๆ รอบครับ)
pypy --jit off

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

ขอบคุณครับ


,

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)