zoukankan      html  css  js  c++  java
  • 浅谈Flask 中的 线程局部变量 request 原理

     

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/he93007/article/details/78646988

    在多线程服务器中客户端每建立一个链接,服务器就创建一个线程,每个线程中就会有一个request来表示客户端的链接请求信息。

    不同的用户访问flask服务器.都有自己的request.

    用户A------------线程A-------------> request

    用户B------------线程B-------------> request

    1. from flask import request
    2.  
    3. @app.route("/index")
    4.  
    5. def index():
    6. params = request.args.get()
    7. return "hello world"

    线程局部变量的本质是全局变量     大概的实现方式>>>>>    

    1. request={
    2.                                                                                        
    3. "线程A":{args,data,form...},
    4.                                                                                        
    5. "线程B":{args,data,form...}
    6.                                                                                        
    7. # ....................
    8.  
    9.                                 }

    Flask 隐藏了一个细节    线程A使用这段函数的时候(比如request.args),并不能直接操作 args,data.等等,

    它先看这段代码当中运行到哪个线程,识别出这个线程,

    从request当中根据当前这个线程的编号,把属于这个线程的参数值拿出来.

    虽然request还是一个全局变量,但是在取值的时候,做了类似相对应的手脚(当然,flask的手脚并没有这么简单,但是并不妨碍我们理解),实现了线程之间的隔离.

  • 相关阅读:
    Fedora 23 配置
    小小的告别一下这个博客
    markdown测试
    ihhh题解
    【BZOJ】1998: [Hnoi2010]Fsk物品调度
    【BZOJ】2563: 阿狸和桃子的游戏
    【BZOJ】3712: [PA2014]Fiolki
    【BZOJ】2333: [SCOI2011]棘手的操作
    我的vimrc
    Ubuntu Gnome 14.04.2 lts 折腾笔记
  • 原文地址:https://www.cnblogs.com/fengff/p/11649574.html
Copyright © 2011-2022 走看看