Ответ
Ответ не найден
Ответ 18+ 🔞
А, ну это же классика, блядь! Сейчас расскажу, как я вчера с этим столкнулся, ебать мои старые костыли. Сижу, значит, пишу код, всё как обычно. И тут понимаю, что мой скрипт, который должен был просто данные перекинуть, жрёт оперативки овердохуища. Ну, думаю, ёпта, что за хуйня?
Смотрю в монитор, а там процесс висит и память хавает, как не в себя. Подозрение ебать чувствую — что-то тут нечисто. Начинаю копать. А оказывается, я, распиздяй, в цикле на каждый чих новый массив создаю, а старый не удаляю. Представляешь? Манда с ушами, а не программист.
# Вот смотри, как я сначала накосячил, чувак:
data = []
for item in huge_list:
new_chunk = process_item(item) # Каждый раз новый объект!
data.append(new_chunk)
# А старый-то process_item(item) где? А него нет, он в памяти болтается!
Удивление пиздец! Сам от себя охуел. Думал, всё оптимизировано, а тут такая, блядь, хитрая жопа вылезла. Терпения ноль ебать, начал всё переделывать.
И главное, что фикс-то простой, как три копейки. Надо было просто использовать генератор, а не список, если дальше всё равно итерация будет. Но нет же, моя гениальная башка решила, что так надёжнее.
# А по-нормальному-то надо было:
def process_data(items):
for item in items:
yield process_item(item) # Лениво, красиво, память не жрёт!
# И потом просто пройтись
for chunk in process_data(huge_list):
do_something(chunk)
Вот так и живём. Кажется, пишешь гениальную систему, а на деле — хуй с горы, который всех завалит при первой же нагрузке. Вывод? Всегда смотри, что оставляешь в памяти, а то будет вам хиросима и нигерсраки в production. Чёрта в душу, в сердцу мать! Теперь хоть знаю, за что себя взъебать можно.