如何在Flask微框架中创建单例对象

Var*_*rad 2 python rabbitmq flask

我正在创建一个类,用于Producer将消息推送到RabbitMQ. 它利用pika module. 我想创建一个处理程序,以便我可以控制与 Rabbit MQ 交互的连接数量。

有没有一种方法可以将其添加到其中app_context并稍后引用它,或者有没有一种方法可以用来init_app定义此处理程序。

任何代码片段都会有很大的帮助。

Hot*_*hen 6

在Python中,大多数情况下不需要使用单例模式,因为Python模块本质上是单例的。但无论如何你都可以使用它。

class Singleton(object):
    _instance = None

    def __init__(self):
        raise Error('call instance()')

    @classmethod
    def instance(cls):
        if cls._instance is None:
            cls._instance = cls.__new__(cls)
            # more init operation here
        return cls._instance
Run Code Online (Sandbox Code Playgroud)

要将 Flask(或任何其他 Web 框架)应用程序用作单例,只需尝试这样。

class AppContext(object):
    _app = None

    def __init__(self):
        raise Error('call instance()')

    @classmethod
    def app(cls):
        if cls._app is None:
            cls._app = Flask(__name__)
            # more init opration here
        return cls._app

app = AppContext.app() # can be called as many times as you want
Run Code Online (Sandbox Code Playgroud)

或者继承Flask类并将其自身设置为单例。