База Hintsage

Память и производительность

Управление памятью, профилирование и оптимизация Python.

Практика

Вопросы: Память и производительность

Разберите, почему этот способ обработки большого набора данных может резко увеличить пиковое потребление памяти:

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))

В парсере статусов одинаковые байтовые значения преобразуются в строки. Объясните, почему проверка идентичности может дать 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])
Программирование PythonПамять и производительностьИнженер по производительности Python

Вам нужно хранить 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))

Показано 2140 из 50