大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
在Python中,除了线程还有一些其他的并发方法如协程。所以在一个WSGI服务中,我们不能保证所有的请求都是以线程的形式存在。另外一种情况是当前请求复用了之前请求的线程,所以上一个请求的数据留在了当前请求的Thread Local对象中。
Werkzeug提供了自己的Local数据存储werkzeug.local
。其提供了与Thread Local近似的功能,但是可以运行线程和greenlet中
from werkzeug.local import Local, LocalManager
local = Local()
local_manager = LocalManager([local])
def application(environ, start_response):
# 绑定请求到local.request中
local.request = request = Request(environ)
...
# local_manager.make_middleware确保指向the local objects的所有资源在请求后清除
application = local_manager.make_middleware(application)
local对象不能管理他们自己。local对象需要使用local manager进行管理。
1 werkzeug.local.release_local(local)
可以释放Local对象以及LocalStack对象,但是不能释放由proxy持有的数据。所有的释放Local对象的实现都是通过release_local来实现的。
>>> loc = Local()
>>> loc.foo = 42
>>> release_local(loc)
>>> hasattr(loc, 'foo')
False
2 class werkzeug.local.LocalManager(locals=None, ident_func=None)
用于管理Local对象,每当LocalManager清除(cleanup()),他就会清除在此上下文中LocalManager所管理的所有Local对象的数据。
- locals : Local对象列表
- ident_func: 覆盖the wrapped locals的默认验证函数
方法:
cleanup()
手动清除当前上下文locals中的数据。可以在请求的最后调用,也可以使用make_middleware()
调用。make_middleware(app)
包裹一个app使得清除操作在请求结束时自动运行get_ident()
不可以覆写个这个方法。返回一个上下文标志,此上下文是local对象在内部使用的上下文。可以使用它其连接到其他的上下文到werkzeug locals。middleware(func)
和make_middleware
作用相同。但是是以装饰器的形式来使用。
@manager.middleware
def application(environ, start_response):
...
3 class werkzeug.local.LocalStack()
与Local相似,但是使用栈来保存对象。其内部初始化一个名字是_local
的Local对象的属性,并绑定stack
到_local
上。
>>> ls = LocalStack()
>>> ls.push(42)
>>> ls.top
42
>>> ls.push(23)
>>> ls.top
23
>>> ls.pop()
23
>>> ls.top
42
他们可以被释放通过:
- pop(),推荐使用。在使用后pop栈中对象释放资源。
- LocalManager
- release_local()
当栈为空后,栈就不再绑定在当前的上下文中(栈被释放)。
方法:
pop()
删除栈顶元素。会返回旧的值。如果栈是空会返回Nonepush()
压入元素top
: property, 返回栈顶元素
4 class werkzeug.local.LocalProxy(local, name=None)
作为werkzeug local的代理,传递所有操作到一个代理对象中。不支持的传递操作有右手操作数(right handed operands)和任何形式的赋值。
创建代理 :
- 像下面代码一样通过直接调用就可以创建Local或LocalStack的代理。werkzeug 0.6.1及以上版本支持。
from werkzeug.local import Local
l = Local()
# these are proxies
request = l('request')
user = l('user')
from werkzeug.local import LocalStack
_response_local = LocalStack()
# this is a proxy
response = _response_local()
- 通过LocalProxy构造器
from werkzeug.local import Local, LocalProxy
local = Local()
request = LocalProxy(local, 'request')
session = LocalProxy(lambda: get_current_request().session)
方法:
_get_current_object()
返回当前的对象。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188777.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...