Почему в моем цикле Python for заканчивается память?
У меня есть цикл for в Python/Django для итерации по длинному списку пользователей и создания рекомендаций для них с использованием сохраненной модели tensorflow:
def create_recommendations_for_users():
user_ids = User.objects.values_list("id", flat=True)
retrieval_model = tf.saved_model.load("tensorflow_models/model")
ranking_model = tf.saved_model.load("tensorflow_models/ranking_model")
for user_id in user_ids:
create_recommendations_for_user(user_id, retrieval_model, ranking_model)
def create_recommendations_for_user(user_id, retrieval_model, ranking_model):
_, items = retrieval_model([user_id])
for item_id in items[0]:
item_id = item_id.numpy()
rating = ranking_model.ranking_model(
(tf.constant([user_id]), tf.constant([item_id]))
).numpy()
Recommendation.objects.create(user_id=user_id, item_id=item_id, rating=rating)
Проблема заключается в том, что вызов create_items_for_users приводит к утечке памяти. Почему это происходит? Функция items привязана к функции create_items_for_user, так что разве она не будет собираться в мусор, как и item_id и rating, каждый раз при выполнении? user_ids представляет собой длинный список целых чисел, но он не растет со временем и не так уж велик. Я нигде не храню растущий список результатов. Почему эти функции могут вызвать утечку памяти?