프로그래밍 언어/Python

Python 모듈을 unload (reload) 하는 법

Rateye 2021. 7. 16. 10:09
728x90
반응형

 

질문 : 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
728x90
반응형