Python Tornado全局变量

1 投票
1 回答
3473 浏览
提问于 2025-04-18 10:58

我有一个用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时,就会直接从系统的缓存中获取这个模块,而不是重新查询。

撰写回答