2014-06-25 3 views
1

파이썬 토네이도 응용 프로그램이 있습니다. 여러 파일에 걸쳐 공유되는 변수를 갖고 싶습니다. 이전에 파이썬 파일 이름 global.py에서 선언하고 시작하여 다른 파일로 가져 왔습니다. 이는 내 변수 중 일부가 데이터베이스에서 쿼리 할 때까지는 좋은 생각이었습니다. 그래서 한 번만 값을 얻기 위해 global.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 


다음 단계는이 같은 토네이도 start.py 내 변수를 정의이었다. 문제는 핸들러 클래스에서만이 변수에 액세스 할 수 있고, 액세스하려는 경우 함수에 전달해야한다는 것입니다. 나는 그것이 좋은 생각이 아니라고 생각합니다. 애플리케이션 인스턴스를 모든 함수 또는 심지어 다른 방법으로 전달하지 않고도 이러한 변수에 액세스 할 수있는 제안이 있습니까?

답변

1

globals.py 파일에 전역 변수를 넣는 것이 좋습니다. globals.py를 가져올 때 Pyonggo를 사용하여 MongoDB에서 값을 쿼리하면 globals.py를 프로세스에서 처음 가져올 때만 작업이 완료됩니다. globals.py의 다른 가져 오기는 sys.modules 캐시에서 모듈을 가져옵니다.

+0

답장을 보내 주셔서 감사합니다.하지만 올바르지 않다고 생각합니다. 30 초마다 실행해야하는 파일이 있습니다. 따라서 매 30 초마다 Globals.py가 실행되고 많은 쿼리가 실행됩니다. 필자는 프로파일 러를 사용하여이를 모니터링했습니다. 다른 아이디어있어? –

+0

그래서 파이썬 인터프리터 호출간에 저장할 변수가 있습니까? 이 경우 로컬 디스크의 파일에 저장하거나 파이썬이 실행될 때 데이터베이스에서 다시 쿼리하십시오. –