cache

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

Введение

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

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

gethostbyname()

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

import socket def main(): print(resolve) ip = resolve("www.eth1.ru") 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

Похожие статьи
Функции
Python
*args **kwargs
sys.argv: аргументы командной строки
Лямбда функции
Функции первого класса
Замыкания
Декораторы
if, elif, else
Циклы
Методы
Итерация
Генераторы
Генераторы: Maintaining State
Встроенные фукнции: all()zip()

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

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

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

@aofeed

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

@aofeedchat

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