PythonFlask上下文管理机制实例解析-创新互联

前言

我们注重客户提出的每个要求,我们充分考虑每一个细节,我们积极的做好成都网站制作、网站设计服务,我们努力开拓更好的视野,通过不懈的努力,创新互联建站赢得了业内的良好声誉,这一切,也不断的激励着我们更好的服务客户。 主要业务:网站建设,网站制作,网站设计,小程序设计,网站开发,技术开发实力,DIV+CSS,PHP及ASP,ASP.Net,SQL数据库的技术开发工程师。

上下文这个概念多见于文章中,是一句话中的语境,也就是语言环境。一句莫名其妙的话出现会让人不理解什么意思,如果有语言环境的说明,则会更好,这就是语境对语意的影响。


上下文是一种属性的有序序列,为驻留在环境内的对象定义环境。在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步、事务、实时激活、安全性等等。


如在计算机中,相对于进程而言,上下文就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。可以理解上下文是环境的一个快照,是一个用来保存状态的对象。在程序中我们所写的函数大都不是单独完整的,在使用一个函数完成自身功能的时候,很可能需要同其他的部分进行交互,需要其他外部环境变量的支持,上下文就是给外部环境的变量赋值,使函数能正确运行。


请求上下文

关于WSGI


WSGI(全称Web Server Gateway Interface),是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口,它封装了接受HTTP请求、解析HTTP请求、发送HTTP,响应等等的这些底层的代码和操作,使开发者可以高效的编写Web应用。


Flask提供了两种上下文,一种是应用上下文(Application Context),一种是请求上下文(Request Context)。

  • RequestContext 请求上下文
  • Request 请求的对象,封装了Http请求(environ)的内容
  • Session 根据请求中的cookie,重新载入该访问者相关的会话信息。
  • AppContext 程序上下文
  • g 处理请求时用作临时存储的对象。每次请求都会重设这个变量
  • current_app 当前激活程序的程序实例

参见Flask上下文官方文档 请求上下文 和 应用上下文.


  1. application 指的就是当你调用app = Flask(__name__)创建的这个对象app;


  2.request 指的是每次http请求发生时,WSGI server(比如gunicorn)调Flask.call()之后,在Flask对象内部创建的Request对象;


  3.application 表示用于响应WSGI请求的应用本身,request 表示每次http请求;


  4.application的生命周期大于request,一个application存活期间,可能发生多次http请求,所以,也就会有多个request


生命周期


  • current_app的生命周期最长,只要当前程序实例还在运行,都不会失效。
  • Request和g的生命周期为一次请求期间,当请求处理完成后,生命周期也就完结了
  • Session就是传统意义上的session了。只要它还未失效(用户未关闭浏览器、没有超过设定的失效时间),那么不同的请求会共用同样的session。

Flask处理流程

local线程隔离对象

不用local对象的情况

from threading import Thread

request = '123'

class MyThread(Thread):
  def run(self):
    global request
    request = 'abc'
    print('子线程',request)  #子线程 abc

mythread = MyThread()
mythread.start()
mythread.join()

print('主线程',request)     #主线程 abc

当前标题:PythonFlask上下文管理机制实例解析-创新互联
本文路径:http://cdiso.cn/article/gsohd.html

其他资讯