首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python的asyncio简单介绍

如果你来到这里,很可能你听说过异步,并发和并行等词。 在我们开始使用asyncio之前,让我们快速了解一些关于这些词汇的基本知识(通过示例),以便我们有一个坚实的基础来构建它。

并发就像在单核CPU上运行两个线程。 来自每个线程的指令可以交错,但在任何给定时间,两个线程中只有一个正在积极地进行。

并行性就像在多核CPU的不同内核上同时运行两个线程。

异步是一种更高级别的编程概念,程序可以在其中启动某项任务,并确定在没有该任务的结果时,最好做其他工作而不是等待。

为什么异步编程?

为什么我们要编写你说的异步程序 - 因为它可以多次提高程序的性能。 想象一下,您有一台运行应用程序的核心机器。 您收到请求,并且需要进行两次数据库查询才能满足该请求。 每个查询需要50毫秒的时间。 使用同步程序,只有在完成第一个请求后才会发出第二个请求 - 总时间为100毫秒。 使用异步程序,您可以依次触发两个查询 - 总时间为50毫秒。

ASYNCIO

Asyncio就是用Python编写异步程序。 Asyncio是介于Event Loop,Tasks和Coroutines之间一个动听的交响乐,配合的非常完美。

事件循环

这就是使一切成为可能的原因 - 一个简单的循环,就是这样。 那不是那么简单。 但这是它的工作原理。 事件循环是交响乐的协调者。 它一个接一个地运行任务。 在任何给定时间,只有一个任务正在运行。

可以想象,由于其他任务正在等待轮到他们,因此主任务面临很大的压力。 因此,当活动任务进行阻塞调用,说一个网络请求,并且无法进一步进展时,它会将控制权交还给事件循环,从而意识到某些其他任务可能更好地利用事件循环的时间。 它还告诉事件循环它究竟被阻塞了什么,这样当网络响应到来时,事件循环可以考虑给它时间再次运行

协程与任务

协程是交响乐的关键元素。当协程没有任何用处时,可以放弃对事件循环的控制。协程是子程序概念的有状态推广。

子程序是一种老式方法。调用子例程来执行计算。可以再次调用它,但它不会在两次调用之间保持状态。每次调用都是新的,并执行相同的计算。

另一方面,协程是一个可爱的小状态小部件。它看起来像一个子程序,但它在两次执行之间保持状态。换句话说,当协程“返回”(产生控制)时,它只是意味着它已暂停其执行(具有一些保存状态)。因此,当您随后“调用”(给予控制)协程时,可以说协程已恢复执行(从保存状态)。

在Python 3.5+中,协程暂停的方式是使用await关键字。 在协程中,当你等待另一个协同程序时,你会离开事件循环并安排等待的协程立即运行。 也就是说,等待coroutine中的other_coroutine将暂停它,并安排协程other_coroutine立即运行。

以下是协程如何相互协作的一个非常简单的示例(Python 3.5+)。 我们将使用预定义的协程asyncio.sleep来帮助我们模拟此示例的阻塞任务,但它可以是真实世界场景中的任何内容,如网络请求,数据库查询等。

一个更现实而又简单的例子

你学会了吗?

Python中如何使用AsyncIO异步编程呢?本周大家一起来学习,欢迎关注公众号!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181213G0C9K700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券