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

РЕКЛАМА от Google. Может быть недоступна в вашем регионе.

Конец рекламы от Google. Если в блоке пусто считайте это рекламой моей телеги

Похожие статьи
Функции
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. Статьи можно расшарить в соцсетях, нажав на иконку сети: