질문 : Python 모듈을 어떻게 언로드 (다시로드)합니까?
오래 실행되는 Python 서버가 있고 서버를 다시 시작하지 않고 서비스를 업그레이드 할 수 있기를 원합니다. 이를 수행하는 가장 좋은 방법은 무엇입니까?
if foo.py has changed:
unimport foo <-- How do I do this?
import foo
myfoo = foo.Foo()
답변
reload
내장 함수를 사용하여 이미 가져온 모듈을 다시로드 할 수 있습니다 (Python 3.4 이상 만 해당) .
from importlib import reload
import foo
while True:
# Do some things.
if is_changed(foo):
foo = reload(foo)
Python 3에서 reload
imp
모듈로 이동되었습니다. 3.4에서 imp
importlib
대신 사용되지 않으며 reload
는 후자에 추가되었습니다. 3 이상을 대상으로하는 경우 reload
호출 할 때 적절한 모듈을 참조하거나 가져 오십시오.
나는 이것이 당신이 원하는 것이라고 생각합니다. Django의 개발 서버와 같은 웹 서버는이를 사용하므로 서버 프로세스 자체를 다시 시작하지 않고도 코드 변경의 영향을 확인할 수 있습니다.
문서에서 인용하려면 :
Python 모듈의 코드가 다시 컴파일되고 모듈 수준 코드가 다시 실행되어 모듈 사전의 이름에 바인딩 된 새 개체 집합을 정의합니다. 확장 모듈의 초기화 기능은 두 번째로 호출되지 않습니다. Python의 다른 모든 객체와 마찬가지로 이전 객체는 참조 횟수가 0으로 떨어진 후에 만 회수됩니다. 모듈 네임 스페이스의 이름은 새롭거나 변경된 개체를 가리 키도록 업데이트됩니다. 이전 개체에 대한 다른 참조 (예 : 모듈 외부의 이름)는 새 개체를 참조하도록 리 바인드되지 않으며 원하는 경우 발생하는 각 네임 스페이스에서 업데이트해야합니다.
질문에서 언급했듯이 Foo
클래스가 foo
모듈에 있으면 Foo
객체를 재구성해야합니다.
출처 : https://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python 요청으로 JSON 데이터를 게시하는 방법 (0) | 2021.07.19 |
---|---|
Python에서 null 개체 참조 (0) | 2021.07.16 |
브라우저에서 Jupyter / ipython 노트북의 셀 너비를 늘리는 방법 (0) | 2021.07.16 |
Python 진행 경로-견습생에서 전문가로 (0) | 2021.07.14 |
파이썬에서 상수를 생성하는 방법 (0) | 2021.07.14 |