首页 > 解决方案 > uWSGI 上自定义类的内存损坏

问题描述

在开发基于 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)

这两个函数都返回列表中的数据。我注意到在调用端点视图时,我在加载模型一时也看到了数据!

不知何故,该类被破坏或与现有的类合并。为什么?该变量是函数的局部变量。

我知道列表(引用/指针)存在问题,但为什么在这种情况下?

标签: python-3.6

解决方案


问题已解决:

Python 堆栈损坏?

children 变量被声明为类级变量,因此它在节点的所有实例之间共享。您需要通过在初始化程序中设置它来将其声明为实例变量。

将声明更改为初始化程序。

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

推荐阅读