Werkzeug_@mapkey注解

Werkzeug_@mapkey注解在Python中,除了线程还有一些其他的并发方法如协程。所以在一个WSGI服务中,我们不能保证所有的请求都是以线程的形式存在。另外一种情况是当前请求复用了之前请求的线程,所以上一个请求的数据留在了当前请求的ThreadLocal对象中。Werkzeug提供了自己的Local数据存储werkzeug.local。其提供了与ThreadLocal近似的功能,但是可以运行线程和greenlet中…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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() 删除栈顶元素。会返回旧的值。如果栈是空会返回None
  • push() 压入元素
  • 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() 返回当前的对象。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188777.html原文链接:https://javaforall.net

(0)
上一篇 2026年4月15日 下午5:04
下一篇 2026年4月15日 下午5:10


相关推荐

  • Python中单引号、双引号和三双引号的区别:

    Python中单引号、双引号和三双引号的区别:Python中单引号、双引号和三双引号的区别先说1双引号与3个双引号的区别,双引号所表示的字符串通常要写成一行如:s1="hello,world"如果要写成多行,那么就要使用\

    2022年7月5日
    21
  • IDEA左侧的project目录中,看不到项目的文件结构图,项目目录不见了

    IDEA左侧的project目录中,看不到项目的文件结构图,项目目录不见了

    2021年9月30日
    144
  • 到底什么是爱_pipeline模式

    到底什么是爱_pipeline模式在各个领域,有一个词眼出现得越来越频繁,即Pipeline。开始接触的时候,百思不得其解,要么觉得作者在用个洋名字在装高大上,其实,鲁迅先生说过一句话,太阳底下没有新鲜事一切的一切,都是纸老虎,Pipeline,你土味一点你把它翻译成一条龙服务专业一点,叫它综合解决方案,就行。算法或者大数据分析里的可重复使用,针对新的数据,直接输入数据,…

    2025年8月23日
    4
  • 什么是数据治理?什么是数据安全治理?两者关系如何?[通俗易懂]

    什么是数据治理?什么是数据安全治理?两者关系如何?[通俗易懂]企业信息化建设是随着企业战略、业务形态、预算等多个方面不断迭代及变化的,所以在建设过程中难免出现阶段鸿沟,跨阶段整合难的现象,当企业以数据为中心的战略考量时,就需要通过数据治理方法对以往问题纠偏,对未来形态建设。本文通过理清数据治理与数据安全治理关系,寄希望帮助读者对两者有所清晰的认识。一、数据治理与数据安全治理关系数据治理简单来讲是通过对数据的梳理整合,利用数据驱动业务,实现企业增值。…

    2022年5月11日
    77
  • Linux共享文件夹

    Linux共享文件夹转载请注明出处 https mp csdn net postedit Linux 虚拟机对外共享文件夹本文指的共享都是基于 samba 服务器已安装的情况 一 Linux 虚拟机右键对外共享遇到的问题是 1 无法共享 提示需要在 smb conf 文件中的 global 字段加入 usershareown false nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp

    2026年3月19日
    2
  • 二、买内存条,需要关注什么:

    二、买内存条,需要关注什么:

    2026年3月16日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号