Python龙卷风全局变量

时间:2014-06-25 05:21:41

标签: python global-variables tornado

我有一个Python Tornado应用程序。我希望有多个文件共享的变量。以前我曾经在python文件名global.py中声明并启动它们并将其导入到其他文件中。这是一个好主意,直​​到我的一些变量需要从数据库查询,因此每次我导入global.py只获得一个值时,所有查询都在运行并导致我的应用程序变慢。
下一步是我在龙卷风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 个答案:

答案 0 :(得分:2)

将全局变量放在globals.py文件中是实现此目的的好方法。如果在导入globals.py时使用PyMongo查询MongoDB中的值,则只有在进程中第一次导入globals.py时才会执行该工作。其他globals.py导入从sys.modules缓存中获取模块。