Почему в моем цикле 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 представляет собой длинный список целых чисел, но он не растет со временем и не так уж велик. Я нигде не храню растущий список результатов. Почему эти функции могут вызвать утечку памяти?

Вернуться на верх