高速動作するPython「PyPy」とは?概要と速度をチェック

この記事では、PythonにおけるPyPyの特徴を解説します。

PyPyって何?
Pythonより高速だって聞いたけど、どれくらい速いの?

Python(CPython)より高速に動作するPython実装のPyPy、興味がある方は多いんじゃないでしょうか。

こんにちはフクロウです。Pythonのインストラクターをやっています。

この記事ではJITコンパイルで高速に動作するPython実装のPyPyについて、概要と実際のスピードテストを紹介します。

結構簡単に使えるPyPy、使わないのは損です!是非試してみましょう。

この記事はこんな人のために書きました。

  • PyPyに興味がある方
  • PyPyとCPythonの速度比較が見たい方
  • pyenvをインストール済みの方
この記事の要約
  • PyPyはPythonで書かれたプログラムを実行するためのPython実装の1つ
  • Pythonで書かれたプログラムの高速実行がPyPyの主な用途
  • PyPyの簡単なインストールにはpyenvの使用がおすすめ

なお、収入UPや将来性を見据え、IT企業に転職したいと考えている人は、ぜひ侍エンジニアをお試しください。

侍エンジニアでは現役エンジニアと学習コーチの2名体制で学習をサポート。20〜50代と年齢に関わらず、希望企業への内定を見据え、スキル習得から就業活動の進め方まで一貫して学べます。

未経験からIT企業に転職したい人は、ぜひ一度お試しください。

\ 給付金で受講料が最大80%OFF /

目次

PyPyとは

cython.org

PyPyとは、Pythonの実装の一つで、CPyhon(いわゆる普通のPython)よりも高速にプログラムを動作させる事ができます。

まず、RPythonというCPythonのサブセットがあります。これはつまり制限付きのCPythonで実装されたPython処理系です。
そしてそのRPythonを使って実装されたのがPyPyになります。
PyPyのプログラムはJust-in-Time(JIT)コンパイルという、実行時にコードのチャンクを実行時に逐一コンパイルするシステムを使って高速化されています。JITコンパイルは何度も使われるコードを最適化するため、Pythonのコードでもかなり早く動かすことができます。

PythonとCPythonって何が違うの?言語仕様と実装の話

PyPyは他のPython実装と同様にpyenvから簡単に利用できます。次の章でインストールを紹介するので、一緒に試してみましょう。

なお、IT企業への転職や副業での収入獲得を見据えたPython・PyPy学習に向け、どう勉強を進めればいいのかなどがあいまいな人は「プログラミング学習プラン診断」をお試しください。

かかる時間は1分ほど。4つの質問に答えるだけで、あなたにあう言語や学習プランを診断してもらえます。

効率よくスキル習得したい人は、ぜひ一度お試しください。

\ 4つの質問に答えるだけ /

PyPyの使い方

インストール

PyPyの最も簡単なインストールには、pyenvを使います。pyenvをインストールしていない方はここをチェックしてください。

まずはpyenv install –listでインストールできるPythonのバージョンを確認します。

$ pyenv install --list

  ...
  pypy3.5-5.9.0-src
  pypy3.5-5.9.0
  pypy3.5-5.10.0-src
  pypy3.5-5.10.0
  pypy3.5-5.10.1-src
  pypy3.5-5.10.1
  pypy3.5-6.0.0-src
  pypy3.5-6.0.0
  ...

この中から最新版をインストールしましょう。

$ pyenv install pypy3.5-6.0.0

Downloading pypy3-v6.0.0-osx64.tar.bz2...
-> https://bitbucket.org/pypy/pypy/downloads/pypy3-v6.0.0-osx64.tar.bz2
Installing pypy3-v6.0.0-osx64...
Installed pypy3-v6.0.0-osx64 to /Users/Samurai/.pyenv/versions/pypy3.5-6.0.0

あとは適当なディレクトリでpyenv local 使いたいPythonのバージョンとしてやればPypyが使えます。

注意

PyPyは普通のPythonと同じ書き方で利用できます。ただ、C言語で書かれた一部のライブラリは利用できないことに注意してください。

ただし、NumPyなど個別に対応されているものについては利用可能です。

なお、ITの仕事に興味はあるものの、どの職種が自分にあうのかわからない人もいますよね。そんな人は「ITキャリア診断」をお試しください。

かかる時間はたったの1分。5つの質問に答えるだけで、自分にあうIT職種を診断してもらえます。

自身に適した職種が知りたい人は、手軽に試してみると良いですよ。

\ 5つの質問に答えるだけ /

PyPyのスピードテスト

PyPyは普通のCPythonより高速であると書きましたが、どのくらい高速なのか確認してみましょう。ここでは、フィボナッチ数列を出すプログラムfib.pyと最大公約数を計算するプログラムgcb.pyを用意しました。

[fib.py]

#-*- using:utf-8 -*-
import time

def fib_python(n):
    a, b = 0, 1
    for i in range(n):
        a, b = a + b, a
    return a

dump = []
max_iter = 100000
for i in range(max_iter):
    start = time.time()
    
    fib_python(5000)
    
    elapsed_time = time.time() - start
    dump.append(elapsed_time)

print(sum(dump)/max_iter)

[gcb.py]

#-*- using:utf-8 -*-
import time

def gcd_python(x, y):
    if y == 0:
        return x
    else:
        return gcd_python(y, x % y)
    
dump = []
max_iter = 100000
for i in range(max_iter):
    start = time.time()
    
    gcd_python(10000,325)
    
    elapsed_time = time.time() - start
    dump.append(elapsed_time)

print(sum(dump)/max_iter)

このプログラムはそれぞれ、timeモジュールで計算時間を測定しています。max_iterの数字を変更することで、ループ回数を変更できます。

pyenv localでpypyとcpythonそれぞれに変更して実行してみてください。

ちなみに、ここでは以下の環境で実験を行いました。

$ python -V
Python 3.7.2

$ pypy -V
Python 3.5.3 (fdd60ed87e94, Apr 24 2018, 06:10:18)
[PyPy 6.0.0 with GCC 4.2.1 Compatible Apple LLVM 9.1.0 (clang-902.0.39.1)]

それでは実行結果を見てみましょう。

$ python fib.py
0.0005311285495758056

$ pypy fib.py # pyenv localでpythonを変更した場合はpython fib.pyでOKです。
0.0002192509412765503

$ python gcd.py
8.079719543457031e-07

$ pypy gcd.py
1.8852710723876953e-07

それぞれの結果を見てみると、pypyの方がfib.pyで約2.4倍gcb.pyで約4.3倍高速です。全くコードを変えていないのにもかかわらず、これだけ差がでるのはすごいですね!

さて、今回のテストでは分かりやすい結果が出ましたが、PyPyにも高速化の得意不得意があります。是非これ以外のコードでもテストを試してみてください。

なお、IT企業への転職や副業での収入獲得を見据え、独学でPython・PyPyを習得できるか不安な人は「侍エンジニア」をお試しください。

侍エンジニアでは、現役エンジニアと学習コーチの2名体制で学習をサポートしてもらえます。

「受講生の学習完了率98%」「累計受講者数4万5,000名以上」という実績からも、侍エンジニアなら未経験からでも挫折なく転職や副業収入の獲得が実現できますよ。

\ 給付金で受講料が最大80%OFF /

まとめ

この記事ではPythonのプログラムを高速に動作させる実装であるPyPyを紹介しました。

PyPyはpyenvから簡単に試すことができるPython実装で、JITコンパイラのおかげで素のCPythonよりも数倍高速です。

Pythonの高速化にはこれ以外にも、Cythonを使う方法やNumPyを使う方法などがあります。

その中でもPyPyは学習コストが少ない高速化方法だと思います。是非使ってみてください!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次