Повреждение памяти для пользовательского класса в uWSGI - PullRequest
0 голосов
/ 01 октября 2018

Во время разработки нового приложения на основе Django я заметил повреждение памяти.У меня есть две функции, которые используют этот класс:

class ConfigMap():
    data = list()

    def add(self, entry: CusDeployPhone):
        for row in self.data:
           if row.phone_var.varid == entry.phone_var.varid:
               return self
        self.data.append(entry)
        return self

    def get(self):
        return self.data

Функция # 1

def gen_config_model(request, deploy_phone):
    deploy_phone_general = CusDeployPhone.objects.filter(phone_model=7)

    config_list_model = ConfigMap()

    for entry in deploy_phone:
        config_list_model.add(entry)

    for entry in deploy_phone_general:
        config_list_model.add(entry)

Функция # 2

def gen_config_endpoint(request):
    config_list_endpoint = ConfigMap()

    for entry in deploy_model:
        config_list_endpoint.add(entry)

    for entry in deploy_phone_general:
        config_list_endpoint.add(entry)

Обе функции возвращают данные в списке,Я заметил, что при вызове представления конечной точки я также вижу данные при загрузке model-one!

Каким-то образом класс поврежден или объединен с существующим.Зачем?Переменная является локальной для функции.

Я знаю, что есть проблемы со списками (ссылками / указателями), но почему в этом случае?

1 Ответ

0 голосов
/ 02 октября 2018

Проблема решена:

Повреждение стека Python?

Переменная потомков была объявлена ​​как переменная уровня класса, поэтому она используется всеми экземплярамиваши узлы.Вам необходимо объявить переменную экземпляра, установив ее в инициализаторе.

Изменить объявление на инициализатор.

def __init__(self):
    self.children = []
    ...
...