首页 > 解决方案 > 有没有办法直接在 Jupyter 单元中调用 await ?

问题描述

我已经看到在某些环境中工作的此类代码的示例(例如https://github.com/ipython/ipykernel/pull/323)。

但对我来说,这只是SyntaxError到目前为止:

在此处输入图像描述

更新:

我知道在“纯”python 中它不起作用,await应该async def只在 's 中使用。

我也知道在 jupyter 中可能的(见上面的链接),所以引擎能够做到这一点。问题是如何摆脱这个错误信息。

Update2 直接调用await是什么思路:

我正在使用异步库。在当前版本的 jupyter 中,很难获得协程的返回值:

在此处输入图像描述 我想到的最好的事情是通过全局变量:

在此处输入图像描述

这里的问题之一res是在单元 25 中还没有准备好。我必须等到我看到“完成”,然后使用另一个单元格中的值。

另一个问题是直接从单元调用协程和从另一个协程调用协程之间的语义不对称,这在编辑器中编写脚本时非常不相关,但对于 repl 来说非常重要。

现在考虑一下:

在此处输入图像描述

标签: pythonpython-3.xasync-awaitjupyter-notebookpython-asyncio

解决方案


知道了!

在此处输入图像描述

这需要安装 IPython 的开发版本(https://github.com/ipython/ipython/pull/11155)。

这是:

pip install git+ https://github.com/minrk/ipython.git@more-await-repl#egg=ipython

pip install git+ https://github.com/minrk/ipykernel.git@run-async#egg=ipykernel

更新:

正如@ack 所指出的,现在这个功能存在于 pypi 上的最新版本 ipykernel 中。


推荐阅读