snuffkinの遊び場

IT関係、スポーツ、数学等に関することを、気が向いたときに書いてます。

Python APIでの性能

memcachedのPython API(ftp://ftp.tummy.com/pub/python-memcached/)を利用して性能測定をしてみました。以下は、1KBの文字列を10000回setしたとき、getしたときに必要とした時間です。

operation time(msec)
set 1797
get 2984


計測環境は以下の通り。

  • クライアントもサーバも同一マシン。
  • OS:Windows Vista
  • CPU:Intel Core2 Duo T7500 2.20GHz
  • Memory:2GB
  • memcached:Windows版 version1.2.6

memcachedの起動オプションは以下の通り。

memcached.exe -p 11211 -m 64m

set計測は以下のプログラムを10回実行した平均値を取りました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import memcache

def get_message(kbytes):
    return "1234567890" * 100 * kbytes

if __name__ == '__main__':
    # initialize
    mc = memcache.Client(['127.0.0.1:11211'])
    mc.flush_all()

    message_num  = 10000
    message_size = 1
    message      = get_message(message_size)

    # set
    start_time = time.time()
    for index in range(message_num):
        mc.set(str(index), message)
    end_time = time.time()

    # print progress time
    progress_time = end_time - start_time
    print 'messages: %s' % message_num
    print 'set time: %s' % progress_time

get計測は以下のプログラムを10回実行した平均値を取りました。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import memcache

if __name__ == '__main__':
    # initialize
    mc = memcache.Client(['127.0.0.1:11211'])
    message_num  = 10000

    # get
    start_time = time.time()
    for index in range(message_num):
        message = mc.get(str(index))
    end_time = time.time()

    # print progress time
    progress_time = end_time - start_time
    print 'messages: %s' % message_num
    print 'set time: %s' % progress_time

上記プログラムからも分かるように、正確には1KBより少し小さいメッセージを送っています。

他の言語のクライアントでも計測してみたいですね。スクリプト言語の割にかなり速度が出ているように見えます。Pythonが凄いのか、最近のスクリプト言語はこのくらいの速度が当たり前なのか、memcachedが凄いのか、比較してみないと分かりませんが、性能的には十分使える技術だと思います。