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

备案 网站名称什么用婚纱照

备案 网站名称什么用,婚纱照,深圳商城软件开发,网站怎么做备案0、引子: 如下是一段很基础的多线程代码: from threading import Threaddemo 0def task(arg):global demodemo argprint(demo)for i in range(10):t Thread(targettask, args(i, ))t. start()当程序运行时,可能会看到输出的顺序是混乱的…

0、引子:

  • 如下是一段很基础的多线程代码:
from threading import Threaddemo = 0def task(arg):global demodemo = argprint(demo)for i in range(10):t = Thread(target=task, args=(i, ))t. start()

在这里插入图片描述

当程序运行时,可能会看到输出的顺序是混乱的,因为多个线程是并发执行的。这意味着它们可以同时访问和修改demo变量。因此,你可能会看到输出中的数字在不同的线程间交替出现。这就是多线程并发的典型行为。

简单分析,我上述给出的输出却是有序的?

短任务和快速启动: task函数的工作量很小,仅仅是一个赋值操作和一个打印操作。因此,当主线程在循环中迅速启动线程时,每个线程可能会在下一个线程启动之前完成其任务。

加个睡眠:

from threading import Thread
import timedemo = 0def task(arg):global demodemo = argtime.sleep(2)print(demo)for i in range(10):t = Thread(target=task, args=(i, ))t. start()

在这里插入图片描述

由于线程的启动和执行是并发的,并且demo是一个全局变量,多个线程可能在休眠结束后几乎同时打印它。加上time.sleep(2)的存在,这将使数据竞争更加明显,因此,打印的demo的值可能会与线程接收到的arg值不同。大部分情况下,输出可能会是连续的最后几个数字(如9、9、9…),但这并不是固定的,具体取决于线程调度和执行的实际顺序。

为了避免上述问题:就需要使用锁或其他同步机制来确保线程安全地访问共享资源。

而结合Flask,就来看其他的同步机制:如使用threading.local()对象!

一、threading.local()对象

threading.local()threading模块中是一个非常有用的工具,它提供了一个创建线程局部数据的方法。这意味着每个线程都有其独立的存储变量的实例,而不同线程之间不会相互干扰

当你创建一个threading.local()对象,每个线程可以为该对象赋予自己的属性值,而这些属性值对其他线程是不可见的。

比如:

from threading import Thread
from threading import local
import timedemo = local()def task(arg):demo.value = argtime.sleep(2)print(demo.value)for i in range(10):t = Thread(target=task, args=(i,))t.start()

在这里插入图片描述

回到Flask,Flask为什么需要threading.local()的功能?

回想一下前面讲的session部分,如果一下有很多人的请求进来,Flask处理可以开多个线程,但是每个人的请求都要单独开辟一块空间,去存储对应的数据,每个人的空间相互隔离开来,保证不出现紊乱。这样Flask就可以处理并发了!

仔细回想一下session部分:

当你访问例如flask.requestflask.session时,你实际上是在访问线程(或其他上下文)特定的变量。这意味着在同一个应用中,多个请求可以同时被处理,每个请求都有自己的requestsession对象,彼此之间完全隔离。

但是Flask没直接用threading.local(),而是自己实现了它!

下面就来研究下如何自己实现这个threading.local()的功能?

  • 提示:每个线程都有自己的唯一标识。
from threading import Thread
from threading import get_identdef task(arg):print(get_ident())for i in range(10):t = Thread(target=task, args=(i, ))t. start()

在这里插入图片描述

思路就是为每个线程维护一个字典:这个字典以线程id为key,值为value。形如下:

{6832: {va1: 0, va2: 2},8184: {va1: 6, va2: 5},16184: {va1: 0, va2: 11},
}
http://www.yayakq.cn/news/21673/

相关文章:

  • 浏阳做网站wordpress更换域名sql语句
  • 怎么自己在百度上做网站陕西电商网站建设
  • 卖网站链接google网站地图
  • 互联网门户网站创意设计生活用品
  • 网站是如何制作的天河网站建设制作
  • 湖北省住房城乡建设厅网站有哪些外国网站做精油的
  • 惠济区城乡建设局网站php网页制作实例
  • 网站备案号怎么添加手机网站后台管理系统
  • 辽宁城乡建设部网站建设网站时 首先要解决两个问题 一是什么
  • 北京网站的优化wordpress默认账号密码忘记
  • 成都高端网站建设公司哪家好服务商英文
  • ppt下一页宁波seo关键词费用
  • 找专业做网站品牌活动策划方案
  • 班级网站成品征信报告
  • wordpress模板仿遮天小说站北海手机网站建设
  • 吉林省级建设行政主管部门政务网站大学做网站是什么专业
  • 合肥市做网站的公司有哪些网站建设的功能有哪些内容
  • 做网站买好域名怎么办网站建设的优缺点
  • 国内 上市网站建设公司排名重庆市建设工程质量信息网
  • 企业门户网站特征用手机下载地图到内全卡
  • 网站右下角弹出广告代码seo链接提交入口
  • 上海交通网站建设专门做折扣的网站有哪些
  • 上海网站建设托管淘宝返利网站怎么做
  • wordpress网站防护什么是一学一做视频网站
  • 如何做企业网站php西安网站建站
  • 网站程序上传教程怎么形容网站做的好
  • 微信网站制作北京小程序源码怎么运行
  • 12380举报网站建设经验页面设计软件有哪些
  • 做网站赚钱的QQ群常熟网站建设哪家好
  • 网站服务器错误怎么办软件开发平台是指什么