После удаления переменной большой объект остаётся в памяти: какой механизм нужно проверить первым?
База Hintsage
Программирование Python
Язык Python и его модель данных.
Темы раздела
Выберите подраздел
- 0 вопросов
Общие вопросы
Смешанные вопросы по Python.
Открыть раздел - 50 вопросов
Python Core
Типы, области видимости, функции, модули и базовая семантика.
Открыть раздел - 50 вопросов
Модель данных
Протоколы объектов, dunder-методы, дескрипторы и классы.
Открыть раздел - 48 вопросов
Коллекции и итераторы
Коллекции, comprehensions, iterators и generators.
Открыть раздел - 50 вопросов
Функции и декораторы
Замыкания, decorators, callable-объекты и управление контекстом.
Открыть раздел - 50 вопросов
Конкурентность и asyncio
Threads, processes, GIL, coroutines и asyncio.
Открыть раздел - 50 вопросов
Память и производительность
Управление памятью, профилирование и оптимизация Python.
Открыть раздел - 50 вопросов
Тестирование
pytest, fixtures, mocks и организация тестов.
Открыть раздел
Практика
Вопросы: Программирование Python
Бенчмарк двух реализаций, создающих много временных объектов, показывает преимущество одной из них только в timeit: какой механизм нужно проверить первым?
В долгоживущем обратном вызове после завершения фабричной функции остаётся большой объект: какой механизм замыкания удерживает его?
В веб-сервисе задержка запросов высока, но CPU-профиль почти пуст: какой вид измерения нужно добавить, чтобы увидеть ожидание ввода-вывода?
В долгоживущем Python-сервисе нужен профилировщик с минимальным влиянием на задержку: почему sampling-профилирование обычно предпочтительнее детерминированного?
В сценарии с множеством небольших временных объектов RSS процесса остаётся высоким после их удаления: как аллокатор малых объектов CPython объясняет такое поведение?
В реестре обработчиков сохраняют метод экземпляра, после чего экземпляр не освобождается: какой механизм удерживает его в памяти?
На что повлияет резкое увеличение порога поколения 0 в CPython при неизменном числе создаваемых объектов?
Каким образом __del__ может помешать окончательному освобождению недостижимого объекта?
При распараллеливании CPU-bound задачи потоками в стандартном CPython время почти не сокращается: какой механизм это объясняет?
Разберите, почему этот способ обработки большого набора данных может резко увеличить пиковое потребление памяти:
import asyncio
async def fetch(item):
await asyncio.sleep(0)
return item
async def load(items):
return await asyncio.gather(*(fetch(item) for item in items))
При передаче большого объекта через multiprocessing.Queue почему память временно возрастает у отправляющего процесса?
В сервисе сохраняют пойманное исключение, после чего память большого локального объекта не освобождается: какая связь в traceback объясняет это удержание?
Наблюдается ускорение встроенной операции относительно эквивалентного цикла Python при том же объёме данных: какой механизм CPython обычно даёт этот эффект?
При сравнении времени Python-функции без профайлера и под cProfile результат под профайлером заметно хуже: какой механизм нужно учесть, чтобы не принять это замедление за свойство алгоритма?
После массового удаления ключей из большого словаря его память не уменьшается пропорционально числу удалённых элементов: какой механизм CPython это объясняет?
Представьте фазу обработки, где создаётся много короткоживущих контейнеров без циклических ссылок: в каких условиях временное отключение автоматического сборщика циклов ускорит Python-код?
В горячем цикле обращение к локальной переменной обычно быстрее глобальной: какой механизм CPython это объясняет?
В парсере статусов одинаковые байтовые значения преобразуются в строки. Объясните, почему проверка идентичности может дать True и когда такой подход уменьшит память.
import sys
def parse_status(raw):
return sys.intern(raw.decode("ascii"))
raw_values = [b"ok", b"error", b"ok", b"ok"]
states = [parse_status(value) for value in raw_values]
print(states[0] is states[2])
Вам нужно хранить 10 миллионов целых чисел в памяти. Объясните, почему замена списка на array.array может существенно снизить потребление памяти, и назовите главный компромисс этого решения.
from array import array
values_list = [i for i in range(10_000_000)]
values_array = array("q", range(10_000_000))
Показано 61–80 из 348