【问题标题】:What's the appropriate way to use Flask with zeromq in production?在生产中使用 Flask 和 zeromq 的合适方法是什么?
【发布时间】:2014-08-02 01:36:09
【问题描述】:

我有一个接受 HTTP 请求的 Flask 应用程序。当某些 HTTP 请求进来时,我想在 zeromq 流上触发一条消息。我想一直保持 zeromq 流打开。我想知道这样做的适当方法是什么。由于建议在生产中使用 gunicorn 和 Flask,这是否意味着会有多个 Flask 应用程序实例,如果我将 zeromq 连接与 Flask 应用程序放在同一个地方,那么只有其中一个会是能够连接,其他的就会失败。

【问题讨论】:

    标签: python flask zeromq


    【解决方案1】:

    我使用threading.local() 对象来存储 zeromq 上下文和套接字对象。

    这样我可以在线程中重复使用已经连接的套接字,同时确保每个线程都有自己的套接字对象。

    【讨论】:

    • 你能举个例子吗?我可以在threading.local中存储数据,但是应该如何使用呢?
    【解决方案2】:

    你的应用程序中的 ZMQ 套接字是connect()-ing,还是bind()-ing?如果您的应用程序被视为客户端并且正在连接,那么多个实例应该能够毫无问题地连接。如果它被认为是服务器并且它是绑定的,那么是的,你会遇到问题......但在你的情况下,你似乎应该认为你的 Flask 应用程序更短暂,因此客户端和另一端是更可靠,因此服务器。

    但是没有代码很难真正给出任何具体的建议,我只能从你提供的少量信息中直觉到这么多。

    【讨论】:

      【解决方案3】:

      ZeroMQ 不应跨不同线程重用上下文。这同样适用于套接字。

      如果你设法让工作线程中的一个线程独占使用套接字,你可能会重用 插座。

      无论如何,我会首先为每个请求创建新的上下文和套接字,看看是否有 任何需要进入共享 ZeroMQ 连接的复杂性。设置 ZeroMQ 通常相当快。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        相关资源
        最近更新 更多