Асинхронность в Python позволяет не блокировать выполнение программы во время ожидания операций ввода-вывода (I/O). Это делает её намного быстрее в задачах, где программа тратит много времени на ожидание (например, загрузка файлов, работа с сетью, запросы к базам данных).
В обычном (синхронном) коде каждая операция ждёт завершения предыдущей.
import requests
import time
start = time.time()
def fetch(url):
response = requests.get(url) # Ждём ответа от сервера
return response.text
urls = ["https://example.com"] * 3
for url in urls:
fetch(url) # Ждём каждый запрос
print("Время выполнения:", time.time() - start)
Асинхронность в Python использует event loop (цикл событий), который позволяет не ждать выполнения операции, а переключаться на другие задачи.
import asyncio
import aiohttp
import time
start = time.time()
async def fetch(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
return await response.text()
async def main():
urls = ["https://example.com"] * 3
tasks = [fetch(url) for url in urls]
await asyncio.gather(*tasks) # Запускаем все запросы одновременно
asyncio.run(main())
print("Время выполнения:", time.time() - start)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
Это техника, при которой функция с несколькими аргументами преобразуется в цепочку функций, каждая из которых принимает один аргумент. Это удобно для частичного применения и повышения абстракции.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
Чтобы реализовать метод
__new__
для создания класса по шаблону Singleton, нужно следовать принципам, которые обеспечивают создание только одного экземпляра класса. Метод new отвечает за создание нового экземпляра класса, и его можно использовать для контроля этого процесса. Ниже приведен пример реализации Singleton с использованием метода new.class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(Singleton, cls).__new__(cls, args, kwargs)
return cls._instance
def __init__(self, value):
if not hasattr(self, 'initialized'):
self.value = value
self.initialized = True
# Проверка работы Singleton
singleton1 = Singleton(10)
singleton2 = Singleton(20)
print(singleton1 is singleton2) # Выведет: True
print(singleton1.value) # Выведет: 10
print(singleton2.value) # Выведет: 10
Атрибут _instance
cls._instance
используется для хранения единственного экземпляра класса.Метод
e):
Метод init выполняет инициализацию экземпляра.
Чтобы избежать повторной инициализации, проверяется наличие атрибута
initialized
. Если он не существует, происходит инициализация атрибутов и устанавливается initialized = True
.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Docker кеширует слои, созданные каждой инструкцией Dockerfile. При повторной сборке, если инструкция и её контекст не изменились, Docker использует сохранённый слой из кеша. Это ускоряет сборку и снижает нагрузку на ресурсы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4