【问题标题】:Flask and scaling and concurrencyFlask 和缩放和并发
【发布时间】:2013-07-31 18:08:27
【问题描述】:

documentation 我看到以下内容:

关于 Flask 中的缩放只有一个限制因素,即 上下文本地代理。它们取决于 Flask 中的上下文 定义为线程、进程或greenlet。如果你的服务器 使用某种不基于线程的并发性或 greenlets, Flask 将不再能够支持这些全局 代理。然而,大多数服务器都使用任一线程, greenlets 或单独的进程来实现并发 底层 Werkzeug 库良好支持的方法。

我的问题:除了这三种方法之外,还有哪些并发机制?

【问题讨论】:

    标签: python concurrency flask


    【解决方案1】:

    一个非常有趣的并发机制是异步模型。你有一个进程和一个线程运行整个节目,所有的 I/O 或其他冗长的任务都是异步的和基于回调的。这种方法非常适合 I/O 绑定服务,此类服务器可以轻松处理 C10K 问题。

    有关示例,请参阅 Tornadonode.js

    【讨论】:

    • 这个基本被greenlet覆盖了。
    • @Jahaja:不。基于 Greenlet 的 Web 服务器是一回事,像 Tornado 这样的异步(事件驱动)Web 服务器是另一回事。它们都实现了更高并发的类似目标,但它们使用不同的方法实现了目标。特别是,Flask 可以在基于 greenlet 的 Web 服务器之上工作,但它不容易适应异步服务器。
    • 我的意思是这两种解决方案都使用您在较低层中描述的内容。 Gevent 使用 libevent/libev 和 node.js 使用 libuv。 (记得在某处读过 gevent 2.0,如果发布,可能基于 libuv。)
    • 问题是关于并发模型,而不是使用低级库。事实上,Gevent 与 Node.js 和 Tornado 属于完全不同的类别。
    • 是的,很公平。只是想指出,您在此答案中写的大部分内容也适用于 greenlet/gevent。
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2013-12-17
    • 1970-01-01
    • 2021-02-23
    相关资源
    最近更新 更多