flask高级编程-LocalStack线程隔离

30、LocalStack作为线程隔离对象的意义

  30.1 数据结构

    限制了某些能力

  30.2 线程隔离

# -*- coding=utf-8 -*-
import threading

import time
from werkzeug.local import LocalStack

my_stack = LocalStack()
my_stack.push(1)
print(‘in main thread after push, value is:‘ + str(my_stack.top))

def worker():
    # 新线程
    print(‘in new thread before push, value is:‘ + str(my_stack.top))
    my_stack.push(2)
    print(‘in new thread after push, value is:‘ + str(my_stack.top))

new_t = threading.Thread(target=worker, name=‘qiyue_thread‘)
new_t.start()
time.sleep(1)

test/LocalStack.py

  30.3 flask为什么需要栈结构

    需要栈结构,将两个上下文推到栈中去

  30.4 为什么需要LocalStack

    需要栈是线程隔离的

  30.5 线程隔离意义

    是当前线程能够正确引用到他自己所创建的对象,而不是引用到其他线程所创建的对象

    (1)用一个变量名(request)同事指向多个线程所创建的多个实例化对象是不可能的

    (2)可以做到,在当前线程,在引用request(变量名)可以正确找到当前线程它自己所实例化的Request对象

  30.6 请求上下文包含Request对象,所以,Request也是被线程隔离的

    session也是线程隔离

  30.7 知识梳理

    (1)线程隔离对象

      LocalStack和local是线程隔离对象

    (2)被线程隔离的对象

      通过线程隔离对象来创建被线程隔离的对象

    (3)flask的核心对象app作为一个属性存在于AppContext的应用上下文下

      核心对象app只有一个,是在入口文件创建,在主线程中被创建

    (4)多线程编程难点

      线程安全

      线程隔离

  30.8 总结

    (1)Local->LocalStack,线程隔离对象实现

      Local内部有一个字典,以线程ID号作为key

      LocalStack如何实现?LocalStack封装了Local

      操作Local,通常使用.去访问下面的属性;使用LocalStack,需要使用那几个常用的方法和属性,push、pop、top

    (2)AppContext->RequestContext

      请求进来,会被推入到LocalStack的栈中去,同时在请求结束时,AppContext和RequestContext会被pop弹出去

    (3)Flask->AppContext Request->RequestContext

      AppContext重要特点,将Flask核心对象作为它的一个属性,保存了起来

      RequestContext请求上下文,将请求对象Request封装和保存

    (4)current_app->(LocalStack.top=Appcontext top.app=Flask)

      current_app指向的是LocalStack下面的栈顶元素的一个属性,也就是top.app,Flask的核心对象

      栈顶元素为应用上下文

    (5)request->(LocalStack.top=RequestContext top.request=Request)

      request实际指向的是LocalStack栈顶元素下面的Request请求对象

原文地址:https://www.cnblogs.com/wangmingtao/p/9372611.html

时间: 2024-10-02 21:32:36

flask高级编程-LocalStack线程隔离的相关文章

Python Flask高级编程

第1章 课程导语介绍课程的内容1-1 开宗明义1-2 课程维护与提问 第2章 Flask的基本原理与核心知识本章我们首先介绍Python官方推荐的最佳包与虚拟环境管理工具:Pipenv.接着我们来学习唯一URL原则.重定向.响应对象Response.2-1 鱼书是一个什么样的产品2-2 准备工作2-3 使用官方推荐的pipenv创建虚拟环境(很好用哦~)2-4 开发工具推荐2-5 设置开发工具的默认解释器2-6 flask最小原型与唯一URL原则2-7 路由的另一种注册方法2-8 app.run

localstack 线程隔离

# 线程隔离 from werkzeug.local import LocalStack import threading # 首先实例化 my_stack = LocalStack() my_stack.push(1) # 主线程入栈 def worker(): print("in worker thread the value is:", my_stack.top) my_stack.push(2) # 在worker thread里面push一个元素 print("in

unix高级编程之线程

线程 先有标准,后有实现 POSIX标准 pthread_xxxx(); 一.线程及标识 运行的函数 pthread_t ----> 不能打印 pthread_self(3); pthread_equal(3); ps axm -L 二.线程的创建 pthread_create(3); 三.线程的终止 <1>return <2>pthread_exit(); <3>被cancel <4>任意一个线程调用exit(3),或者main()return(整个

Linux高级编程--09.线程互斥与同步

多个线程同时访问共享数据时可能会冲突,比如两个线程都要把某个全局变量增加1,这个操作在某平台需要三条指令完成: 从内存读变量值到寄存器 寄存器的值加1 将寄存器的值写回内存 假设两个线程在多处理器平台上同时执行这三条指令,则可能导致下图所示的结果,最后变量只加了一次而非两次. 如下例子就演示了这一过程: #include <stdio.h> #include <pthread.h> #include <unistd.h> int counter; /* incremen

学习python-20191203(1)Python Flask高级编程开发鱼书_第01章 Flask的基本原理与核心知识

视频01: 做一个产品时,一定要对自己的产品有一个明确的定位.并可以用一句话来概括自己产品的核心价值或功能. 鱼书网站几个功能 1.选择要赠送的书籍,向他人赠送书籍(价值功能,核心价值的主线): 2.书籍搜索(价值辅助功能): 3.选择自己想要的书籍,向他人索要书箱(价值辅助功能). ———————————————————————————————————————————————————————————— 视频02: 一.开始flask项目的步骤: 1.安装python环境: 2.检验python

python flask高级编程视频教程

课程目录部分截图: 下载地址:百度网盘下载 原文地址:https://www.cnblogs.com/stephae/p/10171715.html

flask-get/post/线程隔离g对象/钩子函数

get: 通过request.args来获取 from flask import Flask, request @app.route('/search/') def search(): # 获得参数字典 args = request.args print(args) # ImmutableMultiDict([('q', 'hello')]) print(args.get('q')) # hello return 'search' post: 1 from flask import Flask,

多线程 用户级线程和内核级线程 from C++多核高级编程

转 http://book.51cto.com/art/201006/206946.htm 6.1.1 用户级线程和内核级线程 2010-06-21 20:37 齐宁/董泽惠 译 清华大学出版社 字号:T | T <C++多核高级编程>第6章多线程,本章将介绍:什么是线程; 用于线程管理的pthread API;线程调度及优先级;线程竞争范围;扩展thread_object以封装线程属性功能.本节为大家介绍用户级线程和内核级线程. AD: 6.1.1  用户级线程和内核级线程 线程有3种实现模

(九) 一起学 Unix 环境高级编程 (APUE) 之 线程

. . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编程 (APUE) 之 文件和目录 (四) 一起学 Unix 环境高级编程 (APUE) 之 系统数据文件和信息 (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境 (六) 一起学 Unix 环境高级编程 (APUE) 之 进程控制 (七) 一起学 Unix 环境高级编程 (APUE)