Py学习  »  Python

IPython 7.0发布:Async REPL

Python程序员 • 5 年前 • 422 次点击  

今天,我们很高兴地宣布IPython 7.0的发布。这个强大的Python交互终端已经远远超越了Python默认的交互终端,它拥有先进的自动补全,语法高亮等。它是jupyter的核心,已经被数百万人使用,希望这里面也有你。这是放弃Python2支持后的第二个主要版本。


不用支持Python2,让我们能够充分地利用起Python3的新特性,进而为IPython带来前所未有的新能力。我们始终鼓励各类库的维护者和用户了解Python2即将不被支持,并学习如何逐渐停止支持Python2,同时不会破坏现有Python2支持库的安装。


作为IPython的开发者和维护者,只需要支持一个Python版本让我腾出了大量的时间。我不用再写分条件的import,我可以依赖于最新的类型标注的特性....这使我的工作变得更加高效。由于IPython的开发都是志愿者在业余时间完成的,所以任何的效率提升都弥足珍贵。


我们这个版本的一个核心特性就是让IPython能够使用Python3.5+的新关键字async和await。当然还有很多其他的改进,你可以阅读详细的发布说明。

IPython7.0中await协程的例子


你可以直接在IPython交互终端中使用async/await,也可以在notebook中使用。绝大多数时候,应该都不会有问题。把IPython升级到7以上版本,IPykernel升级到5以上,你就可以愉快地使用这些关键字了。


Python世界中的Async


在现在的Python生态系统中,软件包习惯于围绕AsyncIO做标准。即便是很有经验的程序员,有时也会觉得AsyncIO太复杂了:这个复杂度一定程度上来源于它要支持很多旧的异步项目,比如Tornado和Twisted。当然这也是它的强大之处,一个事件循环解决所有问题。


做一个很小的异步任务也需要你去学习AsyncIO,然后写不少冗杂的样板代码。对于交互式探索来说,这样就太麻烦了。这使得人们不愿意用AsyncIO代码做实验。


在没有集成async支持前,在Python的交互终端中实验一个小的异步任务


就像Raymond Hettinger所说的:“一定有更好的办法”。


IPython的AsyncIO集成


经过几个月的努力(实际上这项工作两年前就开始了),并且很多人参与了贡献,现在你可以直接在IPython中使用await了,结果就会像你预期的那样。


异步事件循环应该能够自动启动


有了这项集成,你就不需要导入什么,也不需要了解asyncio的细节了。你现在可以专注于业务逻辑了。


你唯一需要记住的就是:如果你用的是一个async函数,那么你需要通过await得到结果。


我们希望这样能让人们探索异步编程时更加轻松。当然这不会让你的代码神奇地变得更快,或者自动地并行运行,它只是让你写起来更容易并且更好理解。


Notebook中的Async


如果你是一个Jupyter用户,你很可能会使用一个Notebook界面,并且通过这个界面和ipykernel交互。


在Notebook中使用AsyncIO


为了让Notebook中能够运行async代码,我们费了很大的工夫。当然这项工作的大头是在IPython中的,IPykernel中只是在一些特殊使用场景下能保证不会出错。你需要将IPython升级到7.0以上版本,并将ipykernel升级到5以上才能使用上面的特性。如果你使用pip,那么命令应该是:$ pip  install  IPython  ipykernel  --upgrade升级之后,async应该在所有支持Jupyter协议的前端中都可以使用了,包括经典的Notebook、JupyterLab、Hydrogen、nteract desktop和nteract web。


未来的改进


据我所知,这是第一个智能支持Async的Python交互终端,而且由于像Trio/Curio这样的库还很年轻,因此可能有大量的使用场景我们还没有考虑到。我们鼓励你来告诉我们你的使用场景,你做了哪些尝试,以及哪部分没有合理地运行。我们还有一些新特性要做(关于async的高级功能、Tab补全、后台任务等),所以我们欢迎新的贡献者。


译者:诗书塞外,译文有删减,选取了主要内容

英文原文:https://blog.jupyter.org/ipython-7-0-async-repl-a35ce050f7f7


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/djriCzEkRt
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/24516
 
422 次点击