2016-10-30 2 views
4

코코아의 NSRunLoop 및 Qt의 QEventLoop과 같은 기존 실행 루프 구현을 기반으로 asyncio에 연결하는 새로운 이벤트 루프를 구현하려고합니다. 그러나 시작할 장소를 고르는 것이 어렵다는 것을 알게됩니다.커스텀 파이썬 asyncio 이벤트 루프 구현 방법을 배우려면 어떻게해야합니까?

설명서에 따르면 시스템이 플러그 가능하도록 설계되었지만 정확하게는 이라고 할 수는 없습니다.이 작업을 수행 할 수 있습니다. AbstractEventLoop 또는 BaseEventLoop으로 시작해야합니까? 어떤 방법으로 어떤 구성 요소를 제공해야합니까? 유용하다고 생각하는 유일한 대안은 uvloop이지만 Cython과 libuv에 많이 의존하기 때문에 이해하기 어렵습니다. 익숙하지 않습니다.

이벤트 루프 구현 방법과 사용자 지정 방법에 대한 글을 올릴 수 있습니까? 또는 덜 복잡한 구현으로 머리를 더 빨리 감쌀 수 있습니까? 어떤 포인터 주셔서 감사합니다.

답변

1

documentationAbstractEventLoop으로부터 상속 받았다.

질문의 나머지 부분에 대해서는 설명서를 매우 명확하게 찾지 못했지만 구체적인 이벤트 루프에 대한 source codeasyncio에 유용했습니다. 나는 이벤트 드리븐 시뮬레이터를 만들기 위해 AbstractEventLoop을 상속 한 pretty minimal example을 썼다.

  • create_task을 구현

    내가 말한 할 좋았을 것 주요 가지 있습니다. 최종 사용자는 asyncio.ensure_future(coro())을 사용하여 코 루틴을 예약하지만 이는 루프의 create_task 메소드를 호출합니다. def create_task(self, coro): return asyncio.Task(coro, loop=self) 이상일 필요는 없습니다.

  • call_sooncall_atcall_later. 이들은 일반 콜백 기능을 예약하기 위해 최종 사용자에 의해 호출됩니다. 최종 사용자가 코 루틴을 계획 할 때마다 자동으로 async/await 시스템에 의해 호출됩니다.

  • 일반 콜백에서 예외가 발생하면 루프의 call_exception_handler 메서드로 이동합니다. 코 루틴이 예외를 발생 시키면, 예외는 비동기 절대 절대로 존재하지 않는 땅에 살며, catch it there이어야합니다.

  • 덮어 써야하는 다른 모든 방법을 보려면 source code for AbstractEventLoop을 찾으십시오. 보너스 : 다소 도움이되는 의견.

관련 문제