来自另一个模块的单个实例

时间:2017-08-09 13:37:51

标签: python python-3.x flask

我来自Java背景,我的大部分想法来自那里。最近开始学习Python。我有一个案例,我想创建一个与Redis的连接,并在项目的任何地方使用它。这是我的结构和代码的外​​观。

module: state.domain_objects.py

    class MyRedis():    
    global redis_instance
    def __init__(self):
        redis_instance = redis.Redis(host='localhost', port=6379, db=0)
        print("Redus instance created", redis_instance)

    @staticmethod
    def get_instance():
        return redis_instance

    def save_to_redis(self, key, object_to_cache):
        pickleObj = pickle.dumps(object_to_cache)
        redis_instance.set(key, pickleObj)

    def get_from_redis(self, key):
        pickled_obj = redis_instance.get(key)
        return pickle.loads(pickled_obj)

    class ABC():
        ....

现在我想从其他模块中使用它。

module service.some_module.py

from state.domain_objects import MyRedis
from flask import Flask, request

@app.route('/chat/v1/', methods=['GET'])
def chat_service():
    userid = request.args.get('id')
    message_string = request.args.get('message')
    message = Message(message_string, datetime.datetime.now())

    r = MyRedis.get_instance()
    user = r.get(userid)


if __name__ == '__main__':
    global redis_instance
    MyRedis()
    app.run()

当我启动服务器时,会调用MyRedis() __init__方法并创建我声明为全局的实例。仍然当服务在调用服务时尝试访问它时,它会显示NameError: name 'redis_instance' is not defined我确定这是因为我正在尝试java-fy方法,但不确定如何实现它。我读到了全局变量,我对它的理解是,它就像模块的单个变量,因此我尝试这样做的方式。请帮我清除我的困惑。谢谢!

0 个答案:

没有答案