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 框架中的线程本地是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

flask是啥意思

将框架添加到项目中的“添加复制文件阶段”是啥意思

Java中的“同步”是啥意思? [复制]

C中的'static void *'是啥意思? [复制]

“应用程序框架”是啥意思? [复制]

当我们使用它时,线程本地是啥? [复制]