阻止jupyter笔记本单元执行到收到特定消息

阻止jupyter笔记本单元执行到收到特定消息

问题描述:

我试图为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

增加了测试的答案,请看看 –

你的问题是你在一个混合两个不同的循环。这就是为什么它不起作用。你需要做一些改变。的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