阻止jupyter笔记本单元执行到收到特定消息
问题描述:
我试图为python实现异步,分布式计算引擎,它与jupyter笔记本兼容。该系统应该基于“推送通知”方法,使得用户无法等待特定的计算结果(即,直到具有预期结果的消息被递送为止),使得它(几乎我希望)不可能等待特定的计算结果。准确地说,我想:阻止jupyter笔记本单元执行到收到特定消息
- 添加新的任务jupyter笔记本事件循环(任务定期检查是否存在特定的味精已经抵达while循环,休息时味精到达)
- 阻止当前单元格等待任务完成。
- 依然能够处理传入消息(使用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度?
答
你的问题是你在一个混合两个不同的循环。这就是为什么它不起作用。你需要做一些改变。的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())
而现在它的工作原理
增加了测试的答案,请看看 –