Python Tornado全局变量
我有一个用Python Tornado写的应用程序。我想要一些可以在多个文件之间共享的变量。之前,我是在一个叫global.py的文件里声明和初始化这些变量,然后在其他文件中导入它。这种做法还不错,直到我发现有些变量需要从数据库查询。每次我导入global.py只为了获取一个值时,所有的查询都会运行,这样就导致我的应用变得很慢。
接下来,我在tornado的start.py文件中这样定义了我的变量:
class RepublishanApplication(tornado.web.Application):
def __init__(self):
##################################################
# conn = pymongo.Connection("localhost", 27017)
self.Countries = GlobalDefined.Countries
self.Countries_rev = GlobalDefined.Countries_rev
self.Languages = GlobalDefined.Languages
self.Categories = GlobalDefined.Categories
self.Categories_rev = GlobalDefined.Categories_rev
self.NewsAgencies = GlobalDefined.NewsAgencies
self.NewsAgencies_rev = GlobalDefined.NewsAgencies_rev
self.SharedConnections = SharedConnections
我可以在处理程序中这样访问这些变量:
self.application.Countries
这样运行得很好。但是问题是,我只能在处理程序类中访问这些变量。如果我想访问它们,就得把这些变量传递给函数。我觉得这样不太好。你有什么建议,可以让我在任何地方都能访问这些变量,而不需要把应用实例传递给我所有的函数,或者有没有其他方法可以帮助我?
1 个回答
3
把你的全局变量放在一个叫做globals.py的文件里是个不错的做法。当你在导入globals.py的时候,如果用PyMongo从MongoDB查询值,这个查询工作只会在这个文件第一次被导入时进行。之后再导入globals.py时,就会直接从系统的缓存中获取这个模块,而不是重新查询。