2017-10-10 82 views
7

我試圖爲python實現異步,分佈式計算引擎,它與jupyter筆記本兼容。該系統應該基於「推送通知」方法,使得用戶無法等待特定的計算結果(即,直到具有預期結果的消息被遞送爲止),使得它(幾乎我希望)不可能等待特定的計算結果。準確地說,我想:阻止jupyter筆記本單元執行到收到特定消息

  1. 添加新的任務jupyter筆記本事件循環(任務定期檢查是否存在特定的味精已經抵達while循環,休息時味精到達)
  2. 阻止當前單元格等待任務完成。
  3. 依然能夠處理傳入消息(使用RabbitMQ的,鼠兔,從http://pika.readthedocs.io/en/0.10.0/examples/asynchronous_consumer_example.html稍微修改代碼)

我已經準備了筆記本電腦提出我的問題:https://github.com/SLEEP-MAN/RabbitMQ_jupyterNotebook_asyncio

任何想法?是否有可能(也許一些IPython/IpyKernel魔術;>?),或者我必須改變我的方法180度?

+0

增加了測試的答案,請看看 –

回答

0

你的問題是你在一個混合兩個不同的循環。這就是爲什麼它不起作用。你需要做一些改變。的TornadoConnection

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

使用AsyncioConnection代替接下來你需要因爲你的循環中連接已經開始刪除下面一行

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

。然後,你需要使用下面的代碼等待

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

而現在它的工作原理

AsyncIO waiting