我来自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方法,但不确定如何实现它。我读到了全局变量,我对它的理解是,它就像模块的单个变量,因此我尝试这样做的方式。请帮我清除我的困惑。谢谢!