Flask框架中的线程局部意味着什么?

时间:2012-02-16 18:44:45

标签: python web-services scalability flask

我正在评估python框架来构建REST API。我经历了很多框架,包括烧瓶,发现Flask非常有趣,易于使用,具有构建REST Web服务所需的所有功能。

我得到的一件事是在烧瓶文档中提到它使用“本地线程并且具有可伸缩性问题”。

  

Flask使用线程本地对象(实际上是上下文本地对象,它们   对于请求,会话和额外的支持greenlet上下文   对象,你可以把自己的东西放在(g)上。为什么会这样,而不是那样   一个坏主意?是的,使用线程通常不是一个好主意   当地人。它们会给不基于服务器的服务器带来麻烦   线程的概念,使大型应用程序更难维护。   但Flask并不适合大型应用程序或   异步服务器。 Flask想要快速轻松地编写一个   传统的网络应用程序。

有人可以帮助我理解这一点,提到了哪些可扩展性问题以及其他框架如何处理这个问题?

1 个答案:

答案 0 :(得分:4)

这不是一个可扩展性问题,而是它可以使维护复杂的代码库变得更加困难。这是因为线程局部变量被用作全局数据存储,以避免通过函数参数传递状态,这使得更难以跟踪正在发生的事情。

速度方面,线程本地化并不是特别慢,但它们确实使得很难或不可能使用异步框架,其中许多任务在单个线程上运行很短的时间。