편집 : 게시물에서 "전역 변수"라고 말하면 mtcbody 스크립트를 참조하고 있습니다. 장고 코드는 전역 변수를 사용하지 않습니다.파이썬 스크립트가 로컬에서 실행 된 후 정리 Django에서
나는 다소 이상한 문제가 있습니다. XML 파일을 가져 와서 구문 분석하고 결과를 반환하는 python 스크립트가 있습니다. 이 스크립트에는 작업을 수행하는 데 사용하는 일부 전역 변수가 있습니다. 예를 들어 이클립스에서이 스크립트를 로컬로 실행하면이 전역 변수와 그 밖의 모든 변수가 결국 자동으로 삭제되고 새 실행은 새 리소스를 사용합니다 (예상대로).
그러나 장고보기에서이 스크립트를 실행하면 동일한 동작이 필요하지만 대신이 스크립트는 전역 변수를 유지하고 요청이있을 때마다이 스크립트를 추가합니다.
import mtcbody
def doShit():
context = {}
result = mtcbody.getData()
# the variable result['tvas_after'] is one of the global variables in the mtcbody script
print 'TVAs after: ' + str(result['tvas_after'])
return context
if __name__ == '__main__':
doShit()
그리고 처음 실행 한 후 결과 :
TVAs after: {'1': <mtcbody.TVA instance at 0x7f28011aac20>}
초 실행 한 후 그 결과
TVAs after: {'1': <mtcbody.TVA instance at 0x7f94bbb96c20>}
결과 다음
이클립스에서 로컬로 실행의 예 세 번째 실행 후 :TVAs after: {'1': <mtcbody.TVA instance at 0x7f9509f49c20>}
TVA 인스턴스를 보유하고있는 사전은 각 실행 중에 처음부터 다시 채워집니다. 지금 비교하는 장고보기에서 동일한 스크립트를 실행했을 때 얻는 행동 :
def index(request):
context = RequestContext(request)
result = mtcbody.getData()
print 'TVAs after: ' + str(result['tvas_after'])
return render(request, 'dashboardbase/table.html', context)
결과 후 첫 새로 고침 (요청) 초 새로 고침 (요청시) 후
TVAs after: {'1': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0850fb488>}
결과
TVAs after: {'1': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0850fb488>, '2': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff066e4afc8>}
세 번째 새로 고침 후 결과 (요청)
TVAs after: {'1': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0850fb488>, '3': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff0a1fa4ea8>, '2': <multitvaconfig.mtc.mtcbody.TVA instance at 0x7ff066e4afc8>}
본 그림에서 알 수 있듯이 스크립트의 변수는 장고보기 호출간에 유지됩니다. 누군가가이 동작을 설명하고 가능한 경우이를 피하고 어떻게 로컬에서 실행되는 것처럼 동작하게 할 수 있습니까?
고맙습니다.
'mtcbody'는 내부에 전역 변수를 사용합니까? –
예, 게시물에서 "전역 변수"라고 말하면 mtcbody 스크립트를 참조하고 있습니다. 내 장고 코드는 전역 변수를 사용하지 않습니다. – Moin