문제

Long story short,내가 실질적 Python 응용 프로그램에는 다른 것들 사이에는 outcalls 하"losetup","산",등등.리눅스에서.기본적으로 소비하는 시스템 리소스를 공개해야합을 때 완료합니다.

면 응용 프로그램,내가 지키고 싶으면 이러한 시스템 리소스가 제대로 발표했다.

그가 뭔가를 다음과 같은?

def main():
    # TODO: main application entry point
    pass

def cleanup():
    # TODO: release system resources here
    pass

if __name__ == "__main__":
    try:
        main()
    except:
        cleanup()
        raise

이것이 뭔가가 일반적으로 수행?은 더 나은 방법이 있을까?아마도 소멸자에 단일까요?

도움이 되었습니까?

해결책

내가 좋아하는 최고 수준의 예외 처리기에서 일반(는 언어에 관계없이).그들은 훌륭한 위치를 정리할 수 없는 소중한 자원이기에 바로에 관련된 자원이 소비되는 내부 메서드를 던지는 예외입니다.

그것은 또한 환상적인 장소 로그인 그 예외가 있는 경우 이러한 프레임워크에서는 장소입니다.최고 수준의 처리기 잡을 것입니다 그 기괴한 예외를 계획하지 않고 당신이 그들을 해결하는 미래에,그렇지 않으면,당신은 결코 그들에 대해 알고있다.

다만주의는 당신의 최고 수준의 처리를 버리지 않는 예외들!

다른 팁

소멸자(로에__del__방법)은 나쁜 아이디어로,이들은 보장을 호출합니다.이 atexit 모듈은 안전한 접근 방식이지만,이는 여전히지 않는 경우는 파이썬 충돌(보다는 Python 응용 프로그램),또는 당 os.Exit;정()를 사용하는 프로세스가 죽을 적극적으로 또는 기계를 재부팅 합니다.(물론,마지막 항목에서 문제가되지 않습니다.) 하는 경우 프로세스가 충돌이 발생하기 쉬운(사용하여 변덕스러운 타사의 확장 모듈이,예를 들어)할 수 있을 정리에 간단한 프로세스는 부모 프로세스에 대한 더 격리입니다.

지 않으면 정말로 걱정을 사용하 atexit 모듈이 있습니다.

응용 프로그램 넓은 처리기는 괜찮습니다.그들은 훌륭한 기록합니다.그냥 있는지 확인하는 응용 프로그램 넓은 내구성과 가능성이 충돌하다.

는 경우에 당신은 클래스를 사용해야 합 무료 리소스를 할당하에서 자신의 소멸자를 대신에,물론입니다.께 사용:에 전체 응용 프로그램을 다하려는 경우 무료 자원하지 않는 이미 해방된 클래스에 의해'소멸자입니다.

고 사용하는 대신 모두 포괄하 제외:사용해야 합니다 다음과 같은 블록

try:
    main()
finally:
    cleanup()

는 것을 보장 정리 더 pythonic 방법입니다.

는 것처럼 보인다 합리적인 접근 방식을,더 간단하고 신뢰할 수 있는 것보다 소멸자에 단일 클래스입니다.수도 있습니다 보면"atexit"모듈이 있습니다.(발음에서"exit",not"tex 그것은"또는 이와 같습니다.내가 혼동하는 장이다.)

작성 고려 컨텍스트의 관리자를 사용하여 함께 문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top