Задать вопрос

Почему не освобождает память после выполнения функции?

Есть функция которая парсит URL и возвращает словарь с 3 ключами в каждом по одному слову (не принципиально маленький словарь по объему занимаемой памяти)
Есть основной поток в котором из списка в эту функцию попадает URL (обычный for url in url_list:)
Функция парсинга отжирает при этом 10 мегабайт на парсинг requests.session.response => lxml.html.fromtext => tree.xpath => переменные для словаря
Почему память не освобождается после завершения каждого парсинга и возвращения маленького словаря, а с каждым новым URL отжирает по 10 мегабайт в итоге на 1500ом URL outofmemory ? Разве память не освобождается после завершения функции ?
или во всем виновата requests.session ?
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Средний 3 комментария
Решения вопроса 1
@MadInc Автор вопроса
И действительно если верить requests session.api на сайте производителя:
# By using the 'with' statement we are sure the session is closed, thus we
# avoid leaving sockets open which can trigger a ResourceWarning in some
# cases, and look like a memory leak in others.
with sessions.Session() as session:
return session.request(method=method, url=url, **kwargs)

попробовал без сессии действительно перестал поглощать память (обошелся бы без сессии, но использую прокси, а выдача результатов на сайте происходит в соответствии с регионом прокси), судя по всему придется завершать сессию периодически и начинать новую и каждый раз в рамках сессии менять регион выдачи результатов запросом

Результат на 60 запросов откушал 5 мегабайт, годно
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы