当前位置: 首页 > news >正文

门户网站建设公司方案景观设计展板

门户网站建设公司方案,景观设计展板,wordpress网站阿里云备案,网络服务是干什么的问题分析 以下是一段每隔半小时重复执行测试用例的脚本,func是传入的测试函数,在执行func前后,会打印操作次数 def repeat(func, action):try:log.info(u******开始并发%s****** % action)thread_list []for i in range(repeat_count):def…

问题分析

以下是一段每隔半小时重复执行测试用例的脚本,func是传入的测试函数,在执行func前后,会打印操作次数

def repeat(func, action):try:log.info(u'******开始并发%s******' % action)thread_list = []for i in range(repeat_count):def run():log.info(u'***第%s次并发%s%svnf开始***' % (i + 1, action, concurrent_count))func(concurrent_count)log.info(u'***第%s次并发%s%svnf结束***\n' % (i + 1, action, concurrent_count))t = Thread(target=run)t.start()thread_list.append(t)time.sleep(60 * 30)log.info('\n')except Exception as e:log.error('!!!!!![%s] failed, message is[%s]!!!!!!' % (action, e.message))

这个脚本之前都能够正常执行,准备的打印操作次数,就是***第%s次并发%s%svnf开始***,以及***第%s次并发%s%svnf结束***\n

但是今天突然发现***第5次并发实例化200vnf开始***被打印了2次,这是什么情况呢?

原来是掉到闭包的坑里了!

上诉for循环中的run函数,里面的变量i位于Enclosing(嵌套函数的外层函数内部)嵌套作用域

在真正执行时,变量i的值可能已经变了,与定义闭包时的值不同

关于作用域,可以参考https://dev.zte.com.cn/topic/#/48178

上诉for循环里有个半小时的延时,如果任务能否在半小时内执行完,那么打印就会正常,因为i的值还未发生变化。但是,如果某个任务A超过半小时,for循环就会进入下一次任务,这时i就会发生变化,当任务A执行完成时,打印的次数就会是已经发生变化的i。这就是今天突然发现***第5次并发实例化200vnf开始***被打印了2次的原因

解决方案

将变量i作为参数传给run函数,run函数内部再定义一个闭包,由run函数来生成闭包。而不是直接在闭包中使用i。即将i作为参数传递给run的count,并在run内部定义inner函数,inner函数内部使用count变量。

这样count就属于run函数的Local作用域,只受run函数内部影响,不会受for循环中i的影响

def repeat(func, action):try:log.info(u'******开始并发%s******' % action)for i in range(repeat_count):def run(count):def inner():log.info(u'***第%s次并发%s%svnf开始***' % (count + 1, action, concurrent_count))func(concurrent_count)log.info(u'***第%s次并发%s%svnf结束***\n' % (count + 1, action, concurrent_count))return innert = Thread(target=run(i))t.start()time.sleep(60 * 30)log.info('\n')except Exception as e:log.error('!!!!!![%s] failed, message is[%s]!!!!!!' % (action, e.message))

总结

使用Python闭包时,如果是在for循环内部生成闭包,并且闭包中使用了Enclosing嵌套作用域中的变量(比如上面的i),最好不要直接使用,而是将变量作为参数传给一个函数,该函数内部再定义一个闭包,由该函数来生成闭包

http://www.yayakq.cn/news/261869/

相关文章:

  • 做电商网站公司python写网站
  • 网站做中英版php做视频网站有哪些
  • 帝国软件怎么做网站旅游网站功能流程图
  • 做定制网站怎么样wordpress视频
  • 微信 购物网站开发wordpress做x站主题
  • 普通电脑可以做网站服务器吗新网站要多久收录
  • 怎么做一元抽奖网站南通企业网站有哪些
  • 网站开发后端语言有哪些站长怎么添加网站内容
  • 瑞昌建站公司小程序制作需要审核资质吗
  • 做网站需要懂什么技术网站开发软件h开头的
  • 做团购网站需要什么资质域名注册好了如何做网站
  • 网站做线支付平台系统多少钱虚拟机可以做多个网站
  • 固始县住房和城乡建设局网站企业网站开发价
  • 海参企业网站怎么做wordpress个人建站教程
  • 麒贺丝网做的网站优化做网站需要域名
  • 商城网站的建设定位网站布局框架
  • 商汇通网站wordpress调用html代码
  • 盐田做网站的公司自己做影视会员网站
  • 360度搜索建站网北京星光灿烂影视有限公司
  • 好的设计网站中国十大建筑公司
  • 在哪个网站上做预收款报告代理公司注册的价格
  • 徐州建站费用电商后台管理网站模板
  • 网站建设审核需要多长时间网站建设公司 经营资质
  • 网站手机缩放用php做网站后台
  • 网站制作文章标签手机网站如何做才能兼容性各种手机
  • 曲靖手机网站建设wordpress 后台不显示
  • 怀化网站建设企业黑龙江 俄语网站制作
  • asp公司企业网站模板源代码网站的引导页面是什么意思
  • 网站建设的展望 视频海外网站如何做用户实名认证
  • 做卖挖掘机的网站怎么选择五屏网站建设