일반적인 함수 호출에서는 프로그램 상태가 간단한 호출 스택에 의해 대부분 설명됩니다. 캐치되지 않은 예외가 발생한 후에는 추적 코드로 인쇄되고 inspect.stack
으로 검사 할 수 있으며 중단 점 다음에 디버거에 표시 될 수 있습니다.발전기/동시 처리 장치가있는 상태에서 프로그램 상태를 검사하는 방법은 무엇입니까?
발전기, 생성기 기반 쿠로루, 및 async def
기반 코 루틴이있는 경우에는 호출 스택이 충분하지 않다고 생각합니다. 정신적으로 프로그램 상태를 시각화하는 좋은 방법은 무엇입니까? 실행 시간에 어떻게 검사합니까?
함수는 inspect.getgeneratorstate
과 inspect.getcoroutinestate
이지만 생성자/동시 루틴이 생성, 실행, 일시 중단 또는 폐쇄되었는지 여부에 대한 정보 만 제공합니다. 상태가 RUNNING
인 경우 생성자 또는 동시 루틴이 현재 실행중인 실제 행 번호와 호출했을 수있는 다른 함수에 해당하는 스택 프레임을 검사 할 수 있기를 원합니다. 경우 SUSPENDED
, 나는 다른 발전기/coroutines 그것이 데이터를 보내거나 굴복을 검사하고 싶습니다.
편집 :이 질문에 대해 질문하는 모든 것을 설명하는 excellent article에 대해 설명하는 관련 question on SO을 발견했습니다.
중단 점에 스택을 표시하거나 예외 처리기에서'async def' 기반 코 루틴 내부에'traceback.print_stack()'을 호출하려고 했습니까? –
@AndrewSvetlov 예. 스택에서 볼 수있는 것은 스택 하단의 이벤트 루프, 중간의 이벤트 처리기 코드 및 스택 상단의 실제 비동기 코 루틴 코드입니다. 다른 코 루틴에 대해서는 전혀 아무것도 보지 못합니다. 다른 스택이나 뭔가가 있어야하는 것처럼 보이지만 내 마음 속에도 선명한 그림을 만들 수는 없습니다. – max