为什么Pylons使用StackedObjectProxies而不是threading.local?
看起来使用 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的文档。