天天看点

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

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

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

最新接受的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 ++。

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

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