cache

Содержание
Введение
Пример
Похожие статьи

Введение

С помощью кэширования можно создавать функции, которые сохраняют своё состояние (maintain state).

Благодаря этому можно увеличить производительность программ.

gethostbyname()

Рассмотрим функцию gethostbyname() из статьи про сокеты

import socket def main(): print(resolve) ip = resolve("www.urn.su") print(ip) def resolve(host): return socket.gethostbyname(host) if __name__ == "__main__": main()

Рассмотрим скрипт resolver.py , в котором реализован тот же функционал, плюс добавлено кэширование

import socket class Resolver: def __init__(self): self._cache = {} # __call__ делает возможным вызвать объект def __call__(self, host): if host not in self._cache: self._cache[host] = socket.gethostname(host) return self._cache[host]

python from resolver import Resolver resolve = Resolver() resolve('heihei.ru')

'87.236.16.134'

>>> resolve.__call__('heihei.ru') '87.236.16.134' >>> resolve._cache {'heihei.ru': '87.236.16.134'} >>> resolve('beget.com') '193.168.47.254' >>> resolve._cache {'heihei.ru': '87.236.16.134', 'beget.com': '193.168.47.254'} >>> from timeit import timeit >>> timeit(setup="from __main__ import resolve", stmt="resolve('google.com')", number=1) 0.011513292000017827 >>> timeit(setup="from __main__ import resolve", stmt="resolve('google.com')", number=1) 1.116900057240855e-05 >>> print("{:f}".format(_)) 0.000011

Добавим функционал

import socket class Resolver: def __init__(self): self._cache = {} def __call__(self, host): if host not in self._cache: self._cache[host] = socket.gethostbyname(host) return self._cache[host] def clear(self): self._cache.clear() def has_host(self, host): return host in self._cache

python >>> from resolver import Resolver >>> resolve = Resolver() >>> resolve.has_host("topbicycle.ru")

False

>>> resolve("topbicycle.ru") '87.236.16.134' >>> resolve.has_host("topbicycle.ru") True >>> resolve.clear() >>> resolve.has_host("topbicycle.ru") False

Похожие статьи
Функции
*args **kwargs
Лямбда функции
all()
any()
map()
zip()
ord()
sorted()
Функции первого класса
Замыкания
Декораторы
Python
if, elif, else
Циклы
Методы
enum

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

IT

Образование

Актуально сейчас

Разное

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: