Message253126
Current check "address in network" is seems a bit odd:
int(self.network_address) <= int(other._ip) < int(self.broadcast_address)
This patch make this in bit-operation manner. Perfomace test:
import ipaddress
import timeit
class IPv6Network2(ipaddress.IPv6Network):
def __contains__(self, other):
# always false if one is v4 and the other is v6.
if self._version != other._version:
return False
# dealing with another network.
if isinstance(other, ipaddress._BaseNetwork):
return False
else:
# address
return other._ip & self.netmask._ip == self.network_address._ip
class IPv4Network2(ipaddress.IPv4Network):
def __contains__(self, other):
# always false if one is v4 and the other is v6.
if self._version != other._version:
return False
# dealing with another network.
if isinstance(other, ipaddress._BaseNetwork):
return False
# dealing with another address
else:
# address
return other._ip & self.netmask._ip == self.network_address._ip
ipv6_test_net = ipaddress.IPv6Network("::/0")
ipv6_test_net2 = IPv6Network2("::/0")
ipv4_test_net = ipaddress.IPv4Network("0.0.0.0/0")
ipv4_test_net2 = IPv4Network2("0.0.0.0/0")
dataipv6 = list()
dataipv4 = list()
for x in range(2000000):
dataipv6.append(ipaddress.IPv6Address(x))
dataipv4.append(ipaddress.IPv4Address(x))
def test():
for d in dataipv6:
d in ipv6_test_net
def test2():
for d in dataipv6:
d in ipv6_test_net2
def test3():
for d in dataipv4:
d in ipv4_test_net
def test4():
for d in dataipv4:
d in ipv4_test_net2
t = timeit.Timer("test()", "from __main__ import test")
print("ipv6 test origin __contains__", t.timeit(number=1))
t = timeit.Timer("test2()", "from __main__ import test2")
print("ipv6 test new __contains__", t.timeit(number=1))
t = timeit.Timer("test3()", "from __main__ import test3")
print("ipv4 test origin __contains__", t.timeit(number=1))
t = timeit.Timer("test4()", "from __main__ import test4")
print("ipv4 test new __contains__", t.timeit(number=1))
Output:
ipv6 test origin __contains__ 4.265904285013676
ipv6 test new __contains__ 1.551749340025708
ipv4 test origin __contains__ 3.689626455074176
ipv4 test new __contains__ 2.0175559649942443 |
|
Date |
User |
Action |
Args |
2015-10-17 11:57:18 | gescheit | set | recipients:
+ gescheit |
2015-10-17 11:57:18 | gescheit | set | messageid: <1445083038.14.0.911555841878.issue25430@psf.upfronthosting.co.za> |
2015-10-17 11:57:17 | gescheit | link | issue25430 messages |
2015-10-17 11:57:17 | gescheit | create | |
|