読者です 読者をやめる 読者になる 読者になる

IPyからipaddrに乗り換えるか検討中

Python

今までIPアドレスの操作にはIPyを使ってきたのですが、Google App EnginePython SDKにはipaddrが含まれているなぁと気付いてからipaddrに乗り換えようか検討中。

import timeit
from IPy import IP
from ipaddr import IPv4Network, IPv4Address

def test_ipy():
    network = IP('192.168.56.0/24')
    for x in xrange(1, 100):
        IP('192.168.56.%d' % x) in network

def test_ipaddr():
    network = IPv4Network('192.168.56.0/24')
    for x in xrange(1, 100):
        IPv4Address('192.168.56.%d' % x) in network

if __name__ == '__main__':
    print 'IPy', timeit.Timer('test_ipy()', 'from __main__ import test_ipy, IP').timeit(number=1000)
    print 'ipaddr', timeit.Timer('test_ipaddr()', 'from __main__ import test_ipaddr, IPv4Address, IPv4Network').timeit(number=1000)

のようなベンチマークをやってみた結果、

IPy 2.51235413551
ipaddr 1.84493803978

のようにipaddrの方が高速という結果が出た。

機能で違いがあるのかもしれないが、自分のユースケースではこのベンチマークくらいのごく単純な用途で十分。IPyでもっと速度を上げる方法があるかもしれないけど、Google App Engineでipaddrをそのまま使えるならば、やっぱりipaddrをとるかなぁ。