2012-04-12 3 views
4

AnyEvent을 사용하여 비동기 적으로 작성된 Perl 프로젝트에서 작업하고 있습니다. 테스트를하는 동안 내 테스트가 완료된 후 내 코드의 버그로 인해 코드가 차단되어 테스트가 통과 된 것처럼 보이지만 차단 된 호출이 나중에 다른 테스트를 오염 시켰습니다.은 AnyEvent 이벤트 큐를 보는 방법입니다.

테스트를 위해 티어 타운에있는 것이 무엇입니까? AnyEvent이 다른 모든 통화 차단을 기다리지 않는지 확인하십시오. 아직 실행되지 않은 호출이 있으면 AnyEvent을 확인할 수 있습니까?

+0

대기열은 사용중인 이벤트 루프 구현에 따라 다릅니다. ''AnyEvent :: Loop'''라는 이름의 순수한 perl 구현체, 특히 변수'''@ timer''와''@ idle'' (소스를보세요)를 살펴보십시오. – mzedeler

답변

-1

귀하의 질문은 직접적인 대답이 없습니다하지만 그것은 또한 당신을 도울 것입니다,

  • 사용 AnyEvent가 : 당신이 당신의 비동기 분기 일이 어디 있는지 확인하기 위해 로그인 도움이 될 두 가지를 제안하고 싶습니다 아이> AnyEvent-으로 지켜보고 당신이 더

에 이동하기 전에 종료 확인하고,
  • 은 하위 과정에서 테스트 루틴을 실행 파괴되지 않아요 만든 물건을 찾을 수

    또한 생성 된 조건부 변수 및/또는 입출력 핸들을 제어 할 수없는 곳을 찾아보십시오. 파괴 할 수있는 것이 더 좋으며 테스트가 훨씬 쉬워집니다.

  • 0

    AnyEvent::Debug을 사용하여 감시자를 랩하고 모든 감시자를 나열하는 'wl'을 비롯하여 명령에 대한 소켓에서 수신 대기하면 필요한 정보를 얻을 수 있습니다.

    코드에서 AnyEvent :: Debug :: shell :: wl 함수를 호출하여 감시자 목록을 얻을 수 있습니다. 그러면 AnyEvent :: Debug :: Wrapped 메서드를 반복하고 검사 할 수 있습니다.

    2

    내가 대답 한 후 질문이 변경되어 첫 번째 답변이 삭제되었습니다. 이것은 오히려 실망 스럽기 때문에 답변을 얻으 려한다면이 같은 질문을 변경해서는 안되고 대신 수정해야하므로 문맥이 명확하게 유지됩니다.

    어쨌든 새 질문에 대해서는 AnyEvent 자체에 이벤트 대기열이 없으므로 볼 수 없습니다. 기본 이벤트 라이브러리 중 일부는 이벤트 대기열을 가지지 만 일부는 대기열에 포함되지 않으며 공개적으로 이벤트 대기열을 내보내지 않습니다.

    이벤트가 대기열에 아직 없기 때문에 이벤트가 처리되지 않았을 수도 있습니다 (예 : 일부 이벤트를 처리하는 동안 타이머가 경과 할 수 있으므로 이벤트가 처리되지 않을 수 있습니다). 이벤트 대기열에 있지만 더 많거나 적게 즉시 트리거됩니다).

    마지막으로 AnyEvent (이벤트 기반)는 차단 된 호출을 기다리지 않습니다.

    +0

    질문의 원래 질문자로서, 나는 그것을 직접 변경하지 않았다. – tbischel

    관련 문제