【问题标题】: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 想让编写一个 传统的网络应用程序。

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

【问题讨论】:

    标签: python web-services scalability flask


    【解决方案1】:

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

    就速度而言,线程局部变量并不是特别慢,但它们确实使使用异步框架变得困难或不可能,其中大量任务在单个线程上运行很短的时间。

    【讨论】:

    • 那么你的意思是线程局部变量有两个不同的问题:(1)程序员必须考虑变量的状态,这使得编程变得非常困难; (2) 常用的异步编程框架在存在线程局部变量的情况下根本无法工作?
    猜你喜欢
    • 2011-05-13
    • 2018-03-12
    • 2019-02-09
    • 2012-04-19
    • 2014-11-11
    • 2014-05-10
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多