동일한`with` 안에 중첩 된 경우`with` 문을 실행하지 마십시오.

Jad S

불변을 추적하기 위해 액세스를 제어하려는 리소스가 있습니다. 특정 전역 변수가 변경 될 때마다 파일에 쓰고 싶습니다. 아이디어는 파일의 데이터가 항상 변수의 데이터와 일치해야한다는 것입니다. with변수를 변경하는 코드를 래핑하고 저장 작업이 발생하는지 확인 하는 문을 사용하여이를 구현하기로 결정했습니다 .

문제 : 실행 중에 A가 B를 호출하는 것을 제외하고는이 변수를 변경할 수있는 두 개의 함수 A와 B가 있다고 가정합니다. 따라서 withB 내부의 with문이 이미 A의 안에 중첩되어있을 때 실행되지 않도록 만들려고 합니다. 이것은의 동작과 유사 RLock에서 threading, 이에 with some_rlock():는 유사한 문장 안에 이미있는 경우 차단하지 않습니다.

class Resource(object):
   r_file = open("r_file.txt", 'a+')
   def __init__(self):
    self.a = 0
    self.r_file.write("Initial value : %s\n"%str(self.a))

   def add(self):
      self.a += 1

   def __enter__(self):
       print "entering"

   def __exit__(self, type, value, traceback):
       self.r_file.write("New value : %s\n"%str(self.a))


resource = Resource()

def B():
   with resource: # should not perform __exit__ operation if already inside A's with statement
       resource.add()

def A():
   with resource:
       B()
       resource.add()

A()

기본적으로 "새 값 : ..."이 한 번 표시되기를 원합니다 r_file.txt(이 작업에 작업 B가 포함되어 있더라도 한 작업 A 동안에 만 액세스되었으므로). 그렇게하는 방법이 있습니까?

알렉스 홀
class Resource(object):
    def __init__(self):
        self._with_count = 0

    def __enter__(self):
        print("Doing enter stuff")
        self._with_count += 1
        return self

    def __exit__(self, type, value, traceback):
        self._with_count -= 1
        assert self._with_count >= 0
        if self._with_count == 0:
            print("Doing exit stuff")


resource = Resource()

with resource:
    with resource:
        pass

산출:

Doing enter stuff
Doing enter stuff
Doing exit stuff

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

두 파일 사이에서 발견 된 경우 동일한 문자열을 다시 인쇄하지 마십시오.

분류에서Dev

중첩 된 엔티티에 대한 등록을 고안하십시오.

분류에서Dev

Vim 7.3 이상에서 너무 큰 경우 실행 취소 파일을로드하지 마십시오.

분류에서Dev

실행 파일을 빌드하는 동안 .so 라이브러리가 관련된 경우 오류에 대한 정의되지 않은 참조

분류에서Dev

감시 점 : 특정 메서드에서 트리거 된 경우 중단하지 마십시오.

분류에서Dev

TypeScript : 컴파일 된 JavaScript에서 require 문을 사용하지 마십시오.

분류에서Dev

mySQL-특정 행에 동일한 값이있는 경우 게시물을 여러 번 가져 오지 마십시오.

분류에서Dev

ID에 값이 없거나 중복 된 경우 XSLT-2.0을 사용하여 요소를 처리하지 마십시오.

분류에서Dev

Spring Boot를 사용하여 Excel 파일을 읽는 동안 MySQL에 중복을 삽입하지 마십시오.

분류에서Dev

JUnit을 5 : 중첩 된 시험에 대한 지정 실행 순서

분류에서Dev

중첩 된 사전에서 동일한 문자열을 확인하는 방법

분류에서Dev

"일치하는"엔티티가 누락 된 경우 속성을 출력하지 마십시오.

분류에서Dev

중단 | 비디오가 일시 중지 된 경우 delay () 함수 제거 (지연이 완료되지 않은 경우에도 더 이상 지연하지 마십시오)

분류에서Dev

문이 충돌하는 경우 중첩 된 배치 파일

분류에서Dev

XCTAssertThrowsSpecific에서 테스트 실행을 중지하지 마십시오.

분류에서Dev

경고하지 않는 지시문에 중첩 된 함수

분류에서Dev

React Router : 중첩 된 경로가 동일한 페이지에서 반응을 렌더링하는 이유

분류에서Dev

Amazon Athena에서 중첩 된 JSON을 구문 분석하는 동안 내부 오류 발생

분류에서Dev

ErrorException에 대한 응답을 중단하지 마십시오.

분류에서Dev

Windows 10에서 감염된 파일을 마우스 오른쪽 버튼으로 클릭하십시오.

분류에서Dev

특정 값이 true 인 경우에만 useEffect를 실행하고 종속성이 변경되지 않는 한 다시 실행하지 마십시오.

분류에서Dev

데이터 프레임에서 작동하지 않는 경우 중첩 된 질문

분류에서Dev

중첩 된 완전한 JSON 파일을 읽는 동안 Spark Scala IDE의 오류

분류에서Dev

1로 설정된 경우 열을 업데이트하지 마십시오.

분류에서Dev

직렬화 된 AuditEvents에 환경을 포함하지 마십시오.

분류에서Dev

지속되지 않는 경우 중첩 된 양식 개체에 대한 삭제 확인란을 표시하지 않음

분류에서Dev

vue.js에서 중첩 루프에서 다른 문은 정확한 값을 표시하는 경우

분류에서Dev

중첩 된 배열 내에서 하위 문서 요소 만 일치하는 경우 문서 반환

분류에서Dev

MySQL : 행 항목 중 하나가 상태 = 1 인 경우 중복 행 항목을 선택하지 마십시오.

Related 관련 기사

  1. 1

    두 파일 사이에서 발견 된 경우 동일한 문자열을 다시 인쇄하지 마십시오.

  2. 2

    중첩 된 엔티티에 대한 등록을 고안하십시오.

  3. 3

    Vim 7.3 이상에서 너무 큰 경우 실행 취소 파일을로드하지 마십시오.

  4. 4

    실행 파일을 빌드하는 동안 .so 라이브러리가 관련된 경우 오류에 대한 정의되지 않은 참조

  5. 5

    감시 점 : 특정 메서드에서 트리거 된 경우 중단하지 마십시오.

  6. 6

    TypeScript : 컴파일 된 JavaScript에서 require 문을 사용하지 마십시오.

  7. 7

    mySQL-특정 행에 동일한 값이있는 경우 게시물을 여러 번 가져 오지 마십시오.

  8. 8

    ID에 값이 없거나 중복 된 경우 XSLT-2.0을 사용하여 요소를 처리하지 마십시오.

  9. 9

    Spring Boot를 사용하여 Excel 파일을 읽는 동안 MySQL에 중복을 삽입하지 마십시오.

  10. 10

    JUnit을 5 : 중첩 된 시험에 대한 지정 실행 순서

  11. 11

    중첩 된 사전에서 동일한 문자열을 확인하는 방법

  12. 12

    "일치하는"엔티티가 누락 된 경우 속성을 출력하지 마십시오.

  13. 13

    중단 | 비디오가 일시 중지 된 경우 delay () 함수 제거 (지연이 완료되지 않은 경우에도 더 이상 지연하지 마십시오)

  14. 14

    문이 충돌하는 경우 중첩 된 배치 파일

  15. 15

    XCTAssertThrowsSpecific에서 테스트 실행을 중지하지 마십시오.

  16. 16

    경고하지 않는 지시문에 중첩 된 함수

  17. 17

    React Router : 중첩 된 경로가 동일한 페이지에서 반응을 렌더링하는 이유

  18. 18

    Amazon Athena에서 중첩 된 JSON을 구문 분석하는 동안 내부 오류 발생

  19. 19

    ErrorException에 대한 응답을 중단하지 마십시오.

  20. 20

    Windows 10에서 감염된 파일을 마우스 오른쪽 버튼으로 클릭하십시오.

  21. 21

    특정 값이 true 인 경우에만 useEffect를 실행하고 종속성이 변경되지 않는 한 다시 실행하지 마십시오.

  22. 22

    데이터 프레임에서 작동하지 않는 경우 중첩 된 질문

  23. 23

    중첩 된 완전한 JSON 파일을 읽는 동안 Spark Scala IDE의 오류

  24. 24

    1로 설정된 경우 열을 업데이트하지 마십시오.

  25. 25

    직렬화 된 AuditEvents에 환경을 포함하지 마십시오.

  26. 26

    지속되지 않는 경우 중첩 된 양식 개체에 대한 삭제 확인란을 표시하지 않음

  27. 27

    vue.js에서 중첩 루프에서 다른 문은 정확한 값을 표시하는 경우

  28. 28

    중첩 된 배열 내에서 하위 문서 요소 만 일치하는 경우 문서 반환

  29. 29

    MySQL : 행 항목 중 하나가 상태 = 1 인 경우 중복 행 항목을 선택하지 마십시오.

뜨겁다태그

보관