Flask 框架中的线程本地是啥意思? [复制]
Posted
技术标签:
【中文标题】Flask 框架中的线程本地是啥意思? [复制]【英文标题】:What does thread local mean in Flask framework? [duplicate]Flask 框架中的线程本地是什么意思? [复制] 【发布时间】:2012-03-08 04:46:05 【问题描述】:我正在评估 python 框架以构建 REST API。我浏览了包括flask在内的许多框架,发现Flask非常有趣且易于使用,并且具有构建REST Web服务所需的所有功能。
我没有得到的一件事是在烧瓶文档中提到它使用“线程本地并且存在可伸缩性问题”。
Flask 使用线程本地对象(实际上是上下文本地对象,它们 也支持greenlet上下文)用于请求、会话和额外的 对象,您可以将自己的东西放在(g)上。为什么会这样? 一个坏主意?是的,使用线程通常不是一个好主意 当地人。它们会给不基于 线程的概念并使大型应用程序更难维护。 然而 Flask 并不是为大型应用程序设计的,或者 异步服务器。 Flask 想让编写一个 传统的网络应用程序。
谁能帮我理解这一点,提到了哪些可扩展性问题以及其他框架如何处理这个问题?
【问题讨论】:
【参考方案1】:这并不是真正的可扩展性问题,而是它会使维护复杂的代码库变得更加困难。这是因为线程局部变量被用作全局数据存储,以避免通过函数参数传递状态,这使得跟踪正在发生的事情变得更加困难。
就速度而言,线程局部变量并不是特别慢,但它们确实使使用异步框架变得困难或不可能,其中大量任务在单个线程上运行很短的时间。
【讨论】:
那么你的意思是线程局部变量有两个不同的问题:(1)程序员必须考虑变量的状态,这使得编程变得非常困难; (2) 常用的异步编程框架在存在线程局部变量的情况下根本无法工作?以上是关于Flask 框架中的线程本地是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章