为什么Pylons使用StackedObjectProxies而不是threading.local?

2 投票
2 回答
754 浏览
提问于 2025-04-15 15:43

看起来使用 threading.local 更简单,也更可靠。

2 个回答

1

因为 threading.local 是在 Python 2.4 版本中新加入的功能。StackedObjectProxy 会尽量使用 threading.local

5

StackedObjectProxy在底层使用了一种叫做threading.local的东西。Pylons不直接使用普通的threading.locals,主要有两个原因:

1) 这样会让API变得更复杂,比如说用request().POST.get('file')就比用request.POST.get('file')麻烦多了。

2) StackedObjectProxys不仅线程安全,还能保证“请求安全”——这意味着在一个Pylons应用里嵌套另一个应用时,引用同样的代理对象是安全的。虽然这种安全性需求不常见,但考虑到WSGI应用之间可以轻松调用彼此,以及使用全局对象的情况,这种可能性是存在的。

想了解更多信息,可以查看paste.registry的文档

撰写回答