上下文

Flask的RuntimeError错误处理

送分小仙女□ 提交于 2019-12-05 20:23:08
在Flask框架中,为我们提供了丰富的上下文对象/变量(request、session、current_app、g),这些上下文对象可以根据不同的上下文环境具备不同的值,所以他们是依赖于上下文环境的,而他们的使用也必须在上下文环境中,如果脱离了上下文环境,对这些没有上下文环境的上下文对象/变量进行相应的操作就会报错:RuntimeError   通俗一点理解(current_app):     应用上下文对象current_app就是对当前Flask创建出来的app对象的一个代理,所以在使用current_app的时候就需要指定它所代理的是哪个app对象(及指定上下文环境),如果未指定,系统就会报错RuntimeError      from flask import Flask, current_app app = Flask(__name__) # 错误写法 current_app.config['SECRET_KEY'] = 'jfiagiisfashjsjf' @app.route("/") def demo(): print(current_app.config.get('SECRET_KEY')) return 'Is OK' if __name__ == '__main__': app.run()   如果按照上面的写,就会导致current

PL真有意思(五):数据类型

喜你入骨 提交于 2019-12-05 20:13:15
前言 现在大多数程序设计语言中都有表达式和/或对象的类型概念。类型起着两种主要作用: 为许多操作提供了隐含的上下文信息,使程序员可以在许多情况下不必显示的描述这种上下文。比如int类型的两个对象相加就是整数相加、两个字符串类型的对象相加就是拼接字符串、在Java和C#中new object()隐含在背后的就是要分配内存返回对象的引用等等。 类型描述了其对象上一些合法的可以执行的操作集合。类型系统将不允许程序员去做一个字符和一个记录的加法。编译器可以使用这个合法的集合进行错误检查,好的类型系统能够在实践中捕获很多错误 类型系统 从编译方面的知识我们可以知道,计算机硬件可以按多种不同的方式去解释寄存器里的一组二进制位。处理器的不同功能单元可能把一组二进制位解释为指令、地址、字符、各种长度的整数或者浮点数等。当然,二进制位本身是无类型的,对存储器的哪些位置应该如何解释,大部分硬件也无任何保留信息。汇编语言由于仅仅是对一些二进制指令的“助记符号”翻译,它也是这种无类型情况。高级语言中则总是关联值与其类型,需要这种关联的一些原因和用途就如前面说到的上下文信息和错误检测。 一般来说,一个类型系统包含一种定义类型并将它们与特定的语言结构关联的机制;以及一些关于类型等价、类型相容、类型推理的规则。 必须具有类型的结构就是那些可以有值的,或者可以引用具有值得对象的结构

第一章-并发编程的挑战

梦想与她 提交于 2019-12-05 17:48:42
并发编程目的是让程序运行的更快。并不是启动更多的线程就能让程序最大限度的执并发执行。并发编程时,如果想通过多线程执行任务让程序执行的更快,会有很多挑战。比如: 上下文切换问题 死锁问题 受限于软件和硬件资源 1.1 - 上下文切换 单核处理器也能支持多线程执行代码。CPU给每个线程分配 cpu时间片 来实现这个机制。时间片是CPU分配给每个线程的执行时间,时间非常短(一般几十ms),所以通过不停的切换线程执行,所以感觉多线程是同时执行的。 上下文切换:CPU通过时间片分配算法来循环执行任务。当前任务执行一个时间片,保存这个任务的状态,然后切换到下一个任务。 保存状态是为了下次切换到这个任务的时候,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。 1.1.1 - 测试上下文切换次数和时长 通过工具测量上下文切换带来的消耗: Lmbench3测量上下文切换时长 vmstat测量上下文切换次数 vmstat 1 1.1.2 - 减少上下文切换 方法有: 无锁并发编程 多线程竞争锁,会引起上下文切换。所以多线程处理数据时,可以使用其他办法来避免使用锁。比如,id按照hash算法取模分段,不同的线程处理 不同的数据。 cas算法 Java的Atomic包使用cas算法来更新数据,不需要加锁 使用最少线程 避免创建不需要的线程。比如任务少,但创建了很多线程来处理

javascript专题系列--尾调用和尾递归

点点圈 提交于 2019-12-05 15:45:41
  最近在看《冴羽的博客》,讲真,确实受益匪浅,已经看了javascript 深入系列和专题系列的大部分文章,可是现在才想起来做笔记。所以虽然很多以前面试被问得一脸懵逼的问题都被“一语惊醒梦中人”过,注意这里我说的是“过”。是的,这些知道点,当时看的时候跟着大佬的思维,确实当时感觉“哦~ 原来是这样”,但是,看了下篇把上篇的知识忘了还是让我感觉自己太挫了。 于是,决定写点笔记来加深一点印象吧!   今天看到了“javascript专题之递归” ( https://github.com/mqyqingfeng/Blog/issues/49 ) 这篇,所以就从这里开始吧! 在这里我再一次看到了尾调用和尾递归这俩个的关键字,距离前一次看到好像还是很多年前的事了,但是当时完全不明所以啊...,但是,今天,结合了之前的 执行上下文 和 执行上下文栈 的知识,总算明白这到底是个啥了!    尾调用,是指函数内部的最后一个动作是函数调用。该调用的返回值,直接返回给函数。    尾递归,函数调用自身,称为递归。如果尾调用自身,就称为尾递归。   至于为什么很多场景要提倡使用尾调用,为什么使用尾调用和尾递归会有更好的性能呢?,就涉及到了执行上下文栈 的知识。 https://github.com/mqyqingfeng/Blog/issues/4 :当执行一个函数的时候,就会创建一个 执行上下文

执行上下文和执行上下文栈的理解

落爺英雄遲暮 提交于 2019-12-05 15:44:16
JavaScript运行的时候总是会‘一段一段’地执行代码比如 var foo = function () { console.log('foo1'); } foo(); // foo1 var foo = function () { console.log('foo2'); } foo(); // foo2    function foo() { console.log('foo1'); } foo(); // foo2 function foo() { console.log('foo2'); } foo(); // foo2    当执行一段代码的时候,会进行一个“准备工作”,比如第一个例子中的变量提升,和第二个例子中的函数提升。 执行一段代码的时候回进行一个准备工作,比如进行变量,函数提升,这个时候就叫做执行上下文(官方说法),本人理解的是执行一段代码会进行变量和函数的分析让代码符合es标准, 执行上下文栈呢? JavaScript 引擎创建了执行上下文栈(Execution context stack,ECS)来管理执行上下文 栈是一种数据结构,先进后出,所以,每次最先执行的代码最后出来; 如下 function fun3() { console.log('fun3') } function fun2() { fun3(); } function fun1() {

变量对象的理解

£可爱£侵袭症+ 提交于 2019-12-05 15:44:00
在一段执行代码中, 全局上下文的变量对象初始化是全局对象 函数上下文的变量对象初始化只包括 Arguments 对象 在进入执行上下文时会给变量对象添加形参、函数声明、变量声明等初始的属性值 在代码执行阶段,会再次修改变量对象的属性值 来源: https://www.cnblogs.com/qqfontofweb/p/11932852.html

关于作用域

流过昼夜 提交于 2019-12-05 15:20:13
运行期上下文:当函数执行时,会创建一个称为执行期上下文的内部对象。一个执行期上下文定义了一个函数执行时的环境,函数每次执行时对应的执行上下文都是独一无二的,所以多次调用一个函数会导致创建多个执行上下文,当函数执行完毕,它所产生的执行上下文被销毁。 查找变量:从作用域链的顶端依次向下寻找。 [ [scope ] ]:每个javascript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,[ [scope ] ]就是其中一个。[ [scope ] ]指的就是我们所说的作用域,其中存储了运行期上下文的集合。 作用域链:[ [scope ] ]中所存储的执行期上下文对象的集合,这个集合呈链式链接,我们把这种链式链接叫做作用域链。 来源: https://www.cnblogs.com/xbzxx/p/11930656.html

css-基础

懵懂的女人 提交于 2019-12-05 15:08:10
1. CSS盒模型 CSS盒模型就是在网页设计中经常用到的CSS技术所使用的一种思维模型。CSS 假定所有的HTML 文档元素都生成了一个描述该元素在HTML文档布局中所占空间的矩形元素框,可以形象地将其看作是一个盒子。CSS 围绕这些盒子产生了一种“盒子模型”概念,通过定义一系列与盒子相关的属性,可以极大地丰富和促进各个盒子乃至整个HTML文档的表现效果和布局结构。 CSS盒模型可以看成是 由从内到外的四个部分构成,即内容区(content)、内边距(padding)、边框(border)和外边距(margin)。内容区是盒子模型的中心,呈现盒子的主要信息内容;内边距是内容区和边框之间的空间;边框是环绕内容区和内边距的边界;外边距位于盒子的最外围,是添加在边框外周围的空间。 根据计算宽高的区域我们可以将其分为 IE盒模型 和 W3C标准盒模型 ,可以通过 box-sizing 来进行设置: content-box :W3C标准盒模型 border-box :IE盒模型 区别: W3C标准盒模型 :width(宽度) = content(内容宽度) IE盒模型 :width(宽度) = content(内容宽度) + padding(内边距) + border(边框) 2. BFC BFC即Block Fromatting Context(块级格式化上下文)

并发编程设计模式之保险箱设计

∥☆過路亽.° 提交于 2019-12-05 14:51:16
多线程设计上下文模式 上下文模式使用threadlocal进行设计 threadlocal在线程间是隔离的,不共享,用于存储线程的变量 上下文就是在程序的执行过程中,上下文主要就是想传人传出的只都存进去,从而用户就可以忽略程序内部需要传输的值 上下文的多线程设计,可以使用保险箱设计: 这是执行查询和连个值得操作,需要每个线程都有自己的一份上下文用于串联这个查询 这是下一步串联id的query 这是第二个查询 这是上下文的设计:使用了holder设计单例模式,因为context存放到threadlocal中,所以每开启一个线程,就有自己的一份context,所以就避免了context的线程安全, 单例模式保证了每个线程只有一份context 总结:以上使用context串联程序间的数据传输,多线程的情况下,使用threadlocal保证了线程安全,使用单例模式保证了每个线程只创建一份context 来源: https://www.cnblogs.com/zj-xu/p/11929291.html

CPU上下文切换详解

二次信任 提交于 2019-12-05 13:54:12
我们都知道CPU上下文切换,会增加系统负载。那什么是CPU上下文,为什么要切换? 什么是CPU上下文 我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而在每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好 CPU 寄存器和程序计数器(Program Counter,PC)。 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文。 而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。 根据任务的不同,CPU的上下文切换可以分为不同的场景,也就是进程上下文切换、线程上下文切换、中断上下文切换。 进程上下文切换 Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级的 Ring 0 和 Ring 3。 内核空间(Ring 0)具有最高权限,可以直接访问所有资源;