错误原理实例如下:

class One():
list = [1, 2, 3] @classmethod
def get_copy_list(cls):
# copy一份list,这样对list的改变不会影响到此对象的list
return cls.list[:] @classmethod
def get_list(cls):
# 直接返回此对象的list,任何对list的操作都会影响到此对象的list
return cls.list if __name__ == '__main__':
# 不影响到One对象的list值
a = One.get_copy_list()
print(a) # [1, 2, 3]
a.append(4)
print(a) # [1, 2, 3, 4]
print(One.get_list()) # [1, 2, 3] # 影响到One对象的list值
b = One.get_list()
print(b) # [1, 2, 3]
b.append(5)
print(b) # [1, 2, 3, 5]
print(One.get_list()) # [1, 2, 3, 5]

解决方法:调用One.get_copy_list()

在flask中,知识点:一个请求 在进入到进程后,会从进程 App中生成一个新的app(在线程中的应用上下文,改变其值会改变进程中App的相关值,也就是进程App的指针引用,包括g,),以及生成一个新的请求上下文(包括session,request)。并把此次请求需要的应用上下文和请求上下文通过dict格式传入到  栈中(从而保证每个请求不会混乱)。并且在请求结束后,pop此次的相关上下文。

错误接口代码大致如下:

class
Model_table
(_ModelPub, DB.Model):
__tablename__ = 'recruit_info' __keys_map__ = {
'info': [
'uid', 'back_img', 'user_name', 'gender', 'age'
]
@Recruit.route('/update_info/<string:action>', methods=['POST'])
info_list = Model_table.__keys_map__['info']
info_list += ['img_id', 'prience_id']
print(info_list)

响应如下(每次请求,都会向model类的列表属性值添加元素,这样会随着时间的增长导致内存消耗越来越大,最终导致服务崩溃):

解决方法:

@Recruit.route('/update_info/<string:action>', methods=['POST'])
info_list = Model_table.__keys_map__['info'][:] #copy一份list即可
info_list += ['img_id', 'prience_id']
print(info_list)

效果显示(每个请求不会混乱):

总结:刚开始以为 在一次请求过程中,无论怎么操作都不会影响到其他请求的执行,当时只考虑了在 请求上下文中不会出现这种问题,但是 应用上下文,是 进程App相关属性或常量的一个引用(相当于指针),任何对应用上下文中的改变(g会在每次请求到来时从新赋值,然后在请求结束后跟随应用上下文,请求上下文一起消失),都会影响到其他请求的执行。

相关连接:

https://blog.tonyseek.com/post/the-context-mechanism-of-flask/

Python直接改变实例化对象的列表属性的值 导致在flask中接口多次请求报错的更多相关文章

  1. C#用反射实现两个类的对象之间相同属性的值的复制

    在进行实体转换操作的时候如果需要在对两个实体之间两个属性字段差不多相同的类要进行一个互相的转换,我们要把a对象的所有字段的值都复制给b对象,我们只能用b.属性=a.属性来写,如果属性字段太多的话,就要 ...

  2. python+selenium遇到元素定位不到的问题,顺便记录一下自己这次的错误(报错selenium.common.exceptions.NoSuchElementException)

    今天在写selenium一个发送邮件脚本时,遇到一些没有找到页面元素的错误.经过自己反复调试,找原因百度,终于解决了.简单总结一下吧,原因有以下几点: 一:Frame控件嵌套,.Frame/Ifram ...

  3. python中引入包的时候报错AttributeError: module 'sys' has no attribute 'setdefaultencoding'解决方法?

    python中引入包的时候报错:import unittestimport smtplibimport timeimport osimport sysimp.reload(sys)sys.setdef ...

  4. python https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]

    python爬虫,使用requests库发送https请求报错:SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 解决方法: imp ...

  5. .NET获取实例化对象的部分属性名称

    前言 项目中实例化的对象,对象中里面很有很多属性,有些是我们不需要的,有些是我们需要的,例如在下面的示例中:ID,CreateBy等属性在CB_Projects对象中是不需要的,在获取实例化对象属性名 ...

  6. [转]C#利用反射实现两个类的对象之间相同属性的值的复制

    本文转自:https://blog.csdn.net/u013093547/article/details/53584591 在使用c#进行程序编写时,会遇到一个问题,两个属性字段差不多相同的类要进行 ...

  7. C#利用反射实现两个类的对象之间相同属性的值的复制

    http://blog.csdn.net/u013093547/article/details/53584591 今天在拷贝对象的时候,看着代码实在是有点烦,一堆一样的代码,还是找找有没有直接反射拷贝 ...

  8. Python基础中所出现的异常报错总结

    今天我们来探索python中大部分的异常报错 首先异常是什么,异常白话解释就是不正常,程序里面一般是指程序员输入的格式不规范,或者需求的参数类型不对应,不全等等. 打个比方很多公司年终送苹果笔记本,你 ...

  9. struts2视频学习笔记 07-08(为Action的属性注入值,指定需要Struts 2处理的请求后缀,常用常量)

    课时7 为Action的属性注入值(增加灵活性,适用于经常更改的参数) Struts2为Action中的属性提供了依赖注入功能,在struts2的配置文件中,我们可以很方便地为Action中的属性注入 ...

随机推荐

  1. SSH登录异常(someone is doing something nasty)

    在平时工作中,有时候需要SSH登陆到别的Linux主机上去,但有时候SSH登陆会被禁止,并弹出如下类似提示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...

  2. 原生js手风琴效果

    //js代码 //获取li var list = document.getElementsByTagName("li")[0]; //遍历  排他 for( var i=0;i&l ...

  3. Problem D: 类的初体验(IV)

    Description 定义一个类Data,只有一个int类型的属性和如下方法: 1.   缺省构造函数,将属性初始化为0,并输出"Data's default constructor.&q ...

  4. python基础11_函数作用域_global_递归

    看到了一个16进制转换的小知识点,就验证了一下运行结果. #!/usr/bin/env python # coding:utf-8 # 看到了16进制转换的问题.顺便验证一下. a = 255 b = ...

  5. SpringBoot(三)thymeleaf+JPA+MySql

    接着上一节的 第一步:在pom文件中加入以下代码: <!--JPA--> <dependency> <groupId>org.springframework.boo ...

  6. ubuntu 部署 wiki.js

    1. 安装node  (还是官网的东西靠谱,虽然是english)  https://github.com/nodesource/distributions/blob/master/README.md ...

  7. 触发移动App崩溃的测试场景

    验证在有不同的屏幕分辨率,操作系统和运营商的多个设备上的App行为. 用新发布的操作系统版本验证App的行为. 验证在如隧道,电梯等网络质量突然改变的环境中的App行为. 通过手动网络从蜂窝更改到Wi ...

  8. java.io.IOException: Could not delete path 'D:\mycode\reactnative\SecondTest\android\app\build\generated\source\r \release\android\support\v7

    问题解决 直观上看是没有删除某个文件,产生的IOException异常,实际上是因为上次编译导致的缓存没有清空导致的. 进入到android目录下运行下面代码清除上次打包时的缓存: ./gradlew ...

  9. win10下VM 中centos 安装共享文件

    一.  安装VMware Tools VMwareTools的安装脚本是要使用到perl的,而CentOS 6自身不带perl,所以需要自己安装.可以自己下载源代码编译,也可以直接用yum来安装. y ...

  10. centos安装VirtualBox增强包VBoxGuestAdditions

    1.如果你的CentOS 版本早于 6,那么需要在 /etc/grub.conf 中添加一行 divider=10,以将这个参数传递给核心,以减少 idle CPU load.   2.#yum up ...