我正在评估python框架来构建REST API。我经历了很多框架,包括烧瓶,发现Flask非常有趣,易于使用,具有构建REST Web服务所需的所有功能。
我得到的一件事是在烧瓶文档中提到它使用“本地线程并且具有可伸缩性问题”。
Flask使用线程本地对象(实际上是上下文本地对象,它们 对于请求,会话和额外的支持greenlet上下文 对象,你可以把自己的东西放在(g)上。为什么会这样,而不是那样 一个坏主意?是的,使用线程通常不是一个好主意 当地人。它们会给不基于服务器的服务器带来麻烦 线程的概念,使大型应用程序更难维护。 但Flask并不适合大型应用程序或 异步服务器。 Flask想要快速轻松地编写一个 传统的网络应用程序。
有人可以帮助我理解这一点,提到了哪些可扩展性问题以及其他框架如何处理这个问题?
答案 0 :(得分:4)
这不是一个可扩展性问题,而是它可以使维护复杂的代码库变得更加困难。这是因为线程局部变量被用作全局数据存储,以避免通过函数参数传递状态,这使得更难以跟踪正在发生的事情。
速度方面,线程本地化并不是特别慢,但它们确实使得很难或不可能使用异步框架,其中许多任务在单个线程上运行很短的时间。