Всем привет.
На python 3 есть следующая функция (только ее часть, вторую часть особо смысла приводить нет дабы никого не путать):
def checkNewProjects(link, last_project, timeout, config, session):
"""Function for check new projects and for restarting timer event"""
time.sleep(timeout)#Wait pause before start parsing
print("Checking projects")
if last_project == "": #It is first launch of function. Need only find last project.
request = session.get(link).text
html = BeautifulSoup(request, "html.parser")
last_project = html.select(".projects .proj")[0].select("h2 a")[0]["href"] #finding link of last project for save
del request, html
checkNewProjects(link, last_project, timeout, config, session)
return
Данный кусок кода после выполнения съедает около 800кб оперативки (вычислялось неоднократными тестами), ниже данных строк выполняются примерно такие же операции и также через del пытаюсь очистить память, но это не особо помогает. Функция постоянно вызывает саму себя пока принудительно не завершить приложение. Хотелось бы узнать:
1. Как избежать потери таких объемов памяти за столь короткие промежутки времени ?
2. Очищает ли del память или просто обнуляет переменные ?
3. Выполнится ли когда-нибудь код, который идет после вызова функции (то есть return) ?
4. Что именно вызывает утечку памяти ?
Я полагаю, что рекурсивный вызов съедает оперативку и функция постоянно ждет пока завершится ее child и так до бесконечности, но не уверен в этом да и довольно большой объем памяти уходит, если учитывать то, что в функцию передаются переменные довольного малого объема.
PS: Пробовал еще через gc принудительно собирать мусор (gc.collect()), но это тоже не дало ожидаемых результатов
PSS: Python начал изучать буквально пару дней назад, прошу сильно не кидать камнями, если глупость где-то написал или сморозил.