python异步调用exe等待_Python添加异步并等待

Python 3.5引入了异步和等待语法,使得异步编程更加直观。这篇博客讨论了PEP 0492如何通过async和await关键字简化异步代码的编写,避免回调地狱,并与其他语言中的异步解决方案进行了比较。文章解释了这些新特性的使用方法以及它们如何改善单线程应用的用户体验。

似乎C#启发了异步编程的异步等待方法正在吞噬世界。Python 3.5是采用它的最新语言。

560ed141194b3c1c7edfd76537be6802.png

最新接受的Python增强建议(PEP)是:

PEP 0492-具有异步和等待语法的协程

由CPython核心开发人员Yury Selivanov创作,他是Sprymix.com的创始人,它为下一版本的Python添加了异步和等待方式来编写异步代码。注意,这不会被反向移植到Python 2的任何分支,因为它的开发已经结束。这可能是升级到Python 3的一个很好的理由,尽管这表示Python 3已经计划了许多新事物,因此值得忘记Python 2。

对于使用单线程用户界面(如C#和JavaScript)的语言而言,异步操作已成为现实,但是Python与UI编程并没有特别的联系。异步编程的问题在于,它破坏了同步程序中的简单控制流。例如,如果您想通过互联网加载一些数据然后进行处理,您可以编写:

加载数据处理数据

但是,如果加载速度很慢并且正在UI线程上完成,则等待将使整个应用程序冻结。直接的解决方案是将处理器数据步骤转换为函数,并将其作为回调传递给负载数据。这是可行的,但很快就会变得非常复杂,从而导致所谓的回调地狱。

asyncand await解决方案解决了该问题,而无需更改控制的自然流程。您可以等待任何已声明为异步的函数调用。因此,如果将加载数据声明为“异步加载数据”,则可以将程序编写为:

等待加载数据处理数据

一旦执行等待加载数据,UI线程将被释放,并在加载完成后返回到进程数据。本质上,您是在要求编译器/解释器完成创建等效于过程数据的回调的工作,而且还要保存和还原整个上下文。例如,如果负载和进程处于循环中,则等待将在重新启动时恢复循环的状态。

简单地说,通过让编译器完成将同步算法转换为异步算法的工作,异步和异步编程就可以与异步编程一样。

这比其他方法要优越得多,如果您认为JavaScript的承诺或未来是个好主意,请再考虑一遍-这要容易得多,它将在JavaScript的下一版本中出现。

异步和等待的Python实现还包括原生协程作为新的独立概念。async关键字用于定义本机协程,而await关键字用于代替yeild关键字进行控制。例如:

异步def get_data():data = await slowdatadownload()...

异步将get_data标记为协程。await调用slowdatadownload并释放执行线程,该线程仅在slowdatadownload完成时返回。

为了使所有这些都能正常工作,必须等待缓慢的数据下载,它可以是本地协程,基于生成程序的协程或具有_await_方法的对象。

还引入了其他功能,例如async;与生成器有一些相互关系,这些生成器用于实现本地协程。

支持或将要支持异步和等待的语言列表正在不断增加-C#。Hack / HHVM,Dart,Scala,并建议将它们添加到ECMAScript和C ++。

这已成为执行异步的标准方法,这不是一件坏事。

560ed141194b3c1c7edfd76537be6802.png

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值