2017-10-10 5 views
7

jupyter 노트북과 호환되는 Python 용 비동기 분산 컴퓨팅 엔진을 구현하려고합니다. 시스템은 사용자가 특정 계산 결과 (예 : 예상 결과가있는 메시지가 전달 될 때까지 주어진 노트북 셀의 실행을 차단)를 기다릴 수 없게 만드는 '푸시 알림'접근 방식을 기반으로합니다. 정확히 말하면, 내가하려고 해요 :특정 메시지가 수신 될 때까지 jupyter 노트북 셀 실행을 차단하십시오.

  1. 노트북 이벤트 루프를 jupyter 새로운 작업을 추가 (루프 동안 특정 MSG가에 도착하면 작업이 주기적으로 확인되고, 휴식이 MSG가 도착)
  2. 블록 현재 셀 작업 완료를 기다리고 있습니다. https://github.com/SLEEP-MAN/RabbitMQ_jupyterNotebook_asyncio

    모든 아이디어 : 나는 준비 노트북이 내 문제를 제시 한

  • 아직도 (약간 http://pika.readthedocs.io/en/0.10.0/examples/asynchronous_consumer_example.html에서 코드를 수정 RabbitMQ, 새앙 토끼 사용) 수신 메시지를 처리 ​​할 수? 가능합니까 (아마도 IPython/IpyKernel의 마법과 같은가?), 아니면 접근 방식을 180도 바꿔야합니까?

  • +0

    추가 된 테스트 대답은 작동 모습을하시기 바랍니다 –

    답변

    0

    두 개의 서로 다른 루프를 하나로 섞은 것이 문제입니다. 그것이 작동하지 않는 이유입니다. 몇 가지 사항을 변경해야합니다.

    사용 AsyncioConnection 대신 TornadoConnection

    return adapters.AsyncioConnection(pika.URLParameters(self._url), 
                 self.on_connection_open) 
    

    의 다음 당신은 당신의 루프가 이미 연결에서 시작되기 때문에

    self._connection.ioloop.start() #throws exception but not a problem... 
    

    라인

    이하로 제거해야합니다. 그런 다음

    loop = asyncio.get_event_loop() 
    loop.run_until_complete(wait_for_eval()) 
    

    을 대기 위해 아래의 코드를 사용해야합니다 그리고 지금은

    AsyncIO waiting

    관련 문제