#python #django #memory-leaks
#python #django #утечки памяти
Вопрос:
У меня есть объект влияния, который имеет много-много полей из более чем 20 тыс. подписчиков.
Я могу читать до 45 влиятельных лиц один за другим и выполнять работу с подписчиками. Это происходит не сразу, а через несколько часов.
код:
while True:
with ThreadPoolExecutor(max_workers=45) as executor:
influencers = Influencer.objects.filter(
status__in=[ProcessStatus.recorded, ProcessStatus.unfinished, ProcessStatus.in_progress]
)
# Process all the influencers.
for influencer_obj in influencers:
influencer_obj.refresh_from_db()
# start the followers filtering process
executor.submit(self.update, influencer_obj)
исключение:
return self.cursor.execute(sql, params)
django.db.utils.DatabaseError: out of memory for query result
У меня есть компьютер с 80 ГБ, на котором запущен клиент, в то время как на компьютере с почтовой базой данных не происходит утечки памяти (с использованием свободной команды).
Во-первых, где проблема с памятью, на клиенте или на сервере БД?
Во-вторых, что я могу сделать, чтобы избежать этого? должен ли я выпустить старый obj?
Ответ №1:
Я установил значение DEBUG равным FALSE. Это решило проблему, больше никаких ошибок памяти. Django при отладке сохраняет каждый запрос в базу данных, что может вызвать ошибку.
ссылка: установите DEBUG = False в вашем settings.py досье. Если DEBUG имеет значение True, то Django сохраняет копию каждого выполненного оператора SQL. См. Часто задаваемые вопросы по Django: Почему Django пропускает память? (спойлер: у Django на самом деле нет утечки памяти).