Python 异步编程 - asyncio 和 await2024年8月29日 | 阅读 7 分钟 asyncio 模块。asyncio 模块具有出色的功能,可让我们编写更高效的 Python 异步应用程序。我们将探讨如何在 Python 中管理异步事件循环。在深入研究此主题之前,让我们先了解什么是异步编程。 什么是异步编程?在同步编程中,方法被编写为一次执行一项任务。如果一个函数依赖于另一个函数的输出,则它必须等待该函数执行完成。程序实际上会一直停止,直到函数完成执行。这意味着一次只能执行一个程序。 这会减慢程序速度,因为它被迫停止并等待某项操作完成。系统中有很多处理器可用,因此将其他任务用于执行非理想任务是一种资源浪费。 为了克服这一点,异步编程概念发挥了作用。它的行为方式不同;它也一次执行一项。但是系统可能不会等待执行完成就进入下一步。 这意味着如果程序将在前一个程序尚未完成且仍在其他地方运行时执行另一项任务,则处理器就不会空闲。 在本教程中,我们将解释为什么我们需要这种类型的编程。 什么是 asyncio - 异步 I/O?asyncio 是一个 Python 库,用于使用async/wait 运行并发代码。它是 Python 异步框架的基础,该框架提供连接库、网络和 Web 服务器、数据库分布式任务队列、高性能等。 此模块提供了围绕事件循环工作的框架,并负责 I/O 和系统事件等事物。 协程和任务asyncio 是一个 Python 库,用于使用async/wait 运行并发代码。它是 Python 异步框架的基础,该框架提供连接库、网络、Web 服务器、数据库分布式任务队列、高性能等。 此模块提供了围绕事件循环工作的框架,并负责 I/O 和系统事件等事物。 示例 - 1输出 Waiting 5 seconds. Hello Hello Hello Hello Hello Finished waiting. 解释 - 在上面的代码中 -
我们还可以调度绑定协程的任务或对象,并帮助它们运行。让我们了解以下示例。 示例 - 2输出 started at 11:11:54 hello world finished at 11:11:57 解释 - 在上面的代码中,
现在,让我们对上面的代码做一些更改,看看结果。 示例 - 3 创建任务输出 started at 15:43:30 hello world finished at 15:43:32 我们可以看到它比上一个程序快 1 秒。create.task()方法将在事件循环中运行,其结果将放入任务中。我们调度了两个任务,并通过 await 返回了它们。 管理 Python 中的异步事件循环Asyncio 也用于管理异步事件循环。事件循环是一个运行异步函数和回调的对象。当我们想要执行协程时,事件对于异步函数至关重要,当我们运行asyncio.run()方法时;事件循环对象会自动创建。要实现更高级的服务器,我们将需要对事件循环进行低级访问。我们需要直接处理事件循环的内部。 事件循环具有以下功能。
让我们看下面的例子。 示例 -输出 This is a asynchronicity! 事件循环通过获取asyncio.get_event_loop(),调度和运行异步任务,并在完成后关闭事件循环来启动。 在 Python 中使用 Stream 读写数据asyncio 模块提供了stream,用于执行高级网络 I/O。它可以作为网络请求的服务器。它最适合长时间运行的网络操作,在这些操作中,应用程序会因为等待其他资源返回结果而阻塞。 asyncio 有两个类StreamReader 和 StreamWriter。这些类用于在高级级别读写网络数据。 要从网络读取,我们需要使用asyncio.open_connection()打开网络。StreamReader和StreamWriter对象函数返回一个元组,我们将对每个连接使用 .read() 和 .write() 方法。 asyncio.start_server() 方法用于接收来自远程主机的连接。此函数将回调函数client_connected_cb作为参数。每当函数收到请求时都会调用它。 同步 Python 中的任务我们之前讨论过,异步程序是独立运行的,但有时我们希望它们之间进行通信。asyncio 模块为我们提供了队列和各种其他方法来建立任务之间的同步。 让我们了解以下实现方法。
这里,有一点应始终牢记,这些方法不是线程安全的。对于在同一事件循环中运行的异步任务,这不是问题。但是我们需要使用 thread 模块在任务之间共享信息。 何时使用异步编程?在以下情况下,我们可以使用异步编程。
asyncio 模块允许我们并行执行多个任务并高效地迭代它们,而不会阻塞应用程序的其余部分。 下面列出了一些可以与 asyncio 很好地配合使用的任务。
Asyncio 中的一些重要函数以下是进行异步编程时使用的一些基本方法。 运行 asyncio 程序
示例 - 创建任务
示例 - 睡眠
示例 - 超时
示例 - 结论本教程介绍了使用 Python asyncio 模块进行异步编程的概念。asyncio 为我们提供了对上下文切换发生时间的编程控制。这意味着我们可以处理多线程编程中出现的许多复杂问题。 这是一个强大而有价值的工具,但仅适用于异步类型的编程。我们已经讨论了协程和任务及其各自的示例。我们还讨论了管理事件循环以及在 Python 中读写流数据。它还包括基本方法。 下一个主题Python main() 函数 |
每次用户提交输入时,都必须对其进行验证,以查看它是否与我们预期的完全一致。我们可以通过两种方式验证输入:通过应用标志变量或实现 try 或 except。标志变量最初将是...
阅读 6 分钟
Apriori 算法是一种机器学习算法,用于理解各种产品之间的关系模式。该算法最流行的用途是根据用户购物车中已有的商品来推荐商品。沃尔玛特别使用了该算法...
5 分钟阅读
通过组合两个或多个不同的推荐系统,混合推荐系统提供了一种全面而周到的方法。它通过利用各种方法的优势并提供有益的用户体验,力求为客户提供更精确、更多样化和个性化的建议。本教程适用于...
阅读9分钟
?首先,我们可以使用内置的 str() 函数在 Python 中连接一个整数和一个字符串,该函数接受一个整数作为参数并生成一个字符串,这两个字符串可以使用“+”运算符组合。它可以实现如下:age =...
阅读 3 分钟
游戏世界中有许多流行的游戏是使用Python框架及其库开发的,例如《战地2》、《加勒比海盗》等等。大多数开发人员更喜欢Python语言而不是其他编程语言,因为它具有许多功能...
阅读 6 分钟
在本主题中,我们将学习如何在Python中添加两个列表。但在深入了解该主题之前,我们需要理解Python中“列表”这个术语。Python列表用于在变量中存储多个项目。列表中的项目可以是...
阅读 6 分钟
Selenium 本质上是一个强大的工具,用于自动化 Web 浏览器和测试 Web 应用程序。它提供了广泛的方法和技术来与 Web 元素交互。最常用的方法之一是 find_elements_by_xpath()。此方法允许您在 Web 页面上定位元素...
阅读 3 分钟
Boost Python 模块是一个 C++ 库,可以实现 Python 和 C++ 之间的无缝互操作性。它提供了将 C++ 类和函数公开给 Python 的工具,允许它们像用 Python 编写的一样使用。使用 Boost Python,可以定义 C++ 类...
阅读 10 分钟
学习:一步一步的方法 Python 语言的基本概念对于程序员和网络工程师至关重要。谁是网络工程师,他们做什么?网络工程师计划、执行和监督网络。此外,由于网络复杂多变,他们还会进行检查...
阅读 6 分钟
1. Kivy的安装 我们需要PyGame才能使用Kivy。PyGame是首批Python游戏开发包之一。注意:我使用Windows操作系统和Python。请查看Kivy在线文档以获取Mac OS的相关信息。我们将首先使用“pip”安装PyGame,然后安装Kivy。如果您有任何构建...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India