Flask上下文(应用程序和请求)与线程局部变量

时间:2016-08-04 16:46:14

标签: python python-3.x flask python-multithreading

Flask Web Development说:

from flask import request
@app.route('/')
def index():
  user_agent = request.headers.get('User-Agent')
  return '<p>Your browser is %s</p>' % user_agent
  

注意在此视图中如何使用函数request,就好像它是全局的一样   变量。实际上,request如果你不能成为全局变量   考虑在线程正在处理的多线程服务器中   来自不同客户的不同请求同时如此   线程需要在请求中看到不同的对象。上下文启用   Flask使线程可以全局访问某些变量   不干扰其他线程。

可以理解,但为什么不简单地request成为thread-local variable?究竟什么是request,它与线程局部变量有何不同?

1 个答案:

答案 0 :(得分:1)

这只是Armin(Flask的作者)的设计决定。你确实可以重写Flask作为线程本地操作,但这不是他想要做的。

Flask(一般来说)的想法是让事情尽可能简单,并抽象出很多想法。这就是为什么许多Flask助手被实现为全局变量的原因:你不必考虑它背后的含义,因为每个全局都被绑定到传入的请求。