2014-06-25 40 views
1

我有一個Python龍捲風應用程序。我想要有多個文件共享的變量。以前我曾經用python文件名global.py聲明並啓動它們並將其導入到其他文件中。這是一個好主意,直​​到我的一些變量需要從數據庫中進行查詢,所以每次我導入global.py只獲取一個值時,所有查詢都在運行並導致我的應用程序變慢。
下一步是我定義我的變量在龍捲風start.py這樣的:Python龍捲風全局變量

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

將您的全局變量放在globals.py文件中是完成此操作的好方法。如果在導入globals.py時使用PyMongo從MongoDB查詢值,那麼只能在第一次在進程中導入globals.py時完成該工作。其他進口的globals.py從sys.modules緩存中獲取模塊。

+0

感謝您的回覆,但我認爲這是不正確的。我有一些需要每30秒運行一次的文件。所以每30秒就會執行一次Globals.py,然後會有很多查詢。我使用Profiler監視了這一點。你有其他想法嗎? –

+0

那麼你想在Python解釋器的調用之間存儲變量嗎?在這種情況下,請將它們存儲在本地磁盤上的文件中,或者在下次運行Python時再次從數據庫中查詢它們。 –