Python 中的异步 for 循环示例详解

 更新时间:2023年05月31日 15:06:22   作者:迹忆客  
这篇文章主要介绍了Python中的异步for循环,我们将讨论 Python 库 asyncio 和运行异步代码所需的函数,需要的朋友可以参考下

本篇文章将提供有关 Python 中异步 for 循环的完整详细信息。 我们将讨论异步函数、异步 for 循环和睡眠概念。

接下来,我们将讨论 Python 库 asyncio 和运行异步代码所需的函数。 最后,我们将看到几个 Python 示例,以充分理解这个概念。

Python 中的异步函数

异步函数有助于与同一程序的其他函数并行运行繁重的任务(如批处理程序,也许我们对在后台运行进程感兴趣)。 当函数不相互依赖或不完全相互依赖时,可以并行运行函数。

同步函数在任务完成后返回控制权,而异步函数返回控制权以并行运行其他函数/代码并在一段时间后取回控制权。 这样,不仅完成了繁重的任务,还并行完成了许多其他任务。

从技术上讲,同步函数会阻塞主函数的控制,而异步函数的执行不会阻塞主函数。 这样,主函数可以并行运行多个异步函数。

Python 中的异步 for 循环

对于同步循环,它们在没有任何暂停/给予控制的情况下执行; 但是,要使它们异步,我们必须在一些异步函数中定义它们。 此外,我们需要在这个过程中休眠一段时间,以控制其他一些功能。

使用睡眠语句

进程/线程/函数可能会休眠一段时间; 你可以考虑休息一下。 但是,目的是在一段时间内失去控制。

结果,其他一些功能获得了控制权。 一段时间后,控制返回,功能恢复。

现在,是时候转向 Python 中的实现了。 我们将逐步讨论语法部分,最后,我们将展示完整的代码。

Python 库和函数

asyncio 是 Python 中的一个库,用于使用 async/await 语法编写并发程序/函数。 async 是每个函数开头使用的关键字(用于创建异步函数)。

语法是:

async def fun_a(t):

这里加入了 async ,将这个函数声明为异步函数。

sleep 函数可以暂停协程的执行一段时间。 协程是在执行过程中构成管道结构的进程/函数。

该函数通过 await 关键字自愿离开 CPU 去执行另一个协作任务。 睡眠函数的语法是:

await asyncio.sleep(1)

await 关键字将控制权返回给事件循环。 您可能会考虑,如果使用 await 命令调用异步函数,则 sleep 语句(在 for 循环内)控制协作进程直到睡眠。

gather 函数将多个协作进程(技术上称为协程)组合起来作为一个单元运行。 此函数按照在 gather 调用中编写的函数的顺序返回结果元组。

语法是:

results = await asyncio.gather(fun_a(5), fun_b(5))

在这里,我们正在制作 fun_a 和 fun_b 的管道,以便它们可以同时运行。

事件循环是每个异步应用程序的主要组成部分。 事件循环运行异步函数。

get_event_loop() 方法检查是否尚未调用 set_event_loop ,它将创建一个事件循环并将其设置为当前。 语法是:

my_loop = asyncio.get_event_loop()

如果在循环已创建时再次执行此命令,则它不会执行任何操作。 但是,在第一次调用中,没有创建循环; 因此,它将创建一个异步循环。

如果 get_event_loop() 返回的循环是异步的,则 run_until_complete() 用于并发运行事件循环。 语法是:

my_loop.run_until_complete(main())

如果主函数是异步的,则此语句将并发运行代码。

异步代码

对运行异步函数/例程/进程所需的概念和 Python 库有了清晰的认识,是时候看一个完整的编码示例了:

import asyncio
async def fun_a(t):
    for i in range(t):
        print("fun_a", end=' ')
        await asyncio.sleep(1)
    return 1
async def fun_b(t):
    for i in range(t):
        print("fun_b", end=' ')
        await asyncio.sleep(1)
    return 2
async def main():
    results = await asyncio.gather(fun_a(5), fun_b(5))
    print(results)
my_loop = asyncio.get_event_loop()
my_loop.run_until_complete(main())

在这段代码的顶部(第一行),我们导入了 asyncio 库。 这个库有一个调用异步函数并发运行的必需函数; 他们已经用语法进行了讨论。

接下来,我们有两个异步函数—— fun_afun_b,我们希望它们同时运行。 同样,我们想从主函数调用异步函数。 因此,main 也被创建为一个异步函数。

另外,请注意我们将 5 传递给我们的函数以在其中运行五次循环。 所以稍后,您可以看到输出并得到循环没有完全运行的想法; 每个都进入睡眠状态并控制另一个功能。

我们将在输出后重复这一点。

在 main 函数中,我们调用了 gather 函数并传递了我们的异步函数,以便它们可以并行运行。 gather 函数返回一个元组,它有两个从我们的目标异步函数返回的值。

我们终于来到了最后两行。 在倒数第二行,我们调用了 get_event_loop 函数来创建一个循环。 在最后一行,使用我们的循环,我们调用了 run_until_complete 函数来开始异步运行我们的主函数。

此代码的输出是:

fun_a fun_b fun_a fun_b fun_a fun_b fun_a fun_b fun_a fun_b [1, 2]

首先,请注意我们的循环并不完全像传统代码那样运行; 相反,两个循环同时运行。 您可以看到两个函数 print 语句的结果。

最后,[1, 2] 是主函数从我们的异步函数接收到的元组。 1 和 2 由我们的异步函数返回,并按照我们在 gather 函数中编写这些函数的顺序排列。

到此这篇关于Python 中的异步 for 循环的文章就介绍到这了,更多相关Python异步 for 循环内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python爬虫之解析HTML页面详解

    Python爬虫之解析HTML页面详解

    本文介绍了Python中用于解析HTML页面的重要工具之一——BeautifulSoup库,详细讲解了BeautifulSoup库的基本使用方法、标签选择器、CSS选择器、正则表达式、遍历文档树等内容,并结合实例代码展示了BeautifulSoup库的应用场景
    2023-04-04
  • Python输入输出从键盘到文件实战全面指南

    Python输入输出从键盘到文件实战全面指南

    这篇文章主要为大家介绍了Python输入输出从键盘到文件实战全面指南,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Python中的collections集合与typing数据类型模块

    Python中的collections集合与typing数据类型模块

    这篇文章介绍了Python中的collections集合与typing数据类型模块,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 用Python解决计数原理问题的方法

    用Python解决计数原理问题的方法

    计数原理是数学中的重要研究对象之一,分类加法计数原理、分步乘法计数原理是解决计数问题的最基本、最重要的方法,也称为基本计数原理,它们为解决很多实际问题提供了思想和工具。本文教大家怎么用Python解决在数学中遇到的计数原理问题。
    2016-08-08
  • python聊天程序实例代码分享

    python聊天程序实例代码分享

    这篇文章主要介绍了用python写的聊天程序,开两个线程,即是客户端,也是服务器,大家可以参考使用
    2013-11-11
  • python smtplib发送多个email联系人的实现

    python smtplib发送多个email联系人的实现

    这篇文章主要介绍了python smtplib发送多个email联系人的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 浅谈Python使用pickle模块序列化数据优化代码的方法

    浅谈Python使用pickle模块序列化数据优化代码的方法

    这篇文章主要介绍了浅谈Python使用pickle模块序列化数据优化代码的方法,pickle模块可以对多种Python对象进行序列化和反序列化,序列化称为pickling,反序列化称为unpickling,需要的朋友可以参考下
    2023-07-07
  • Python实现的二维码生成小软件

    Python实现的二维码生成小软件

    这篇文章主要介绍了Python实现的二维码生成小软件,使用wxPython、python-qrcode、pyqrcode、pyqrnative等技术和开源类库实现,需要的朋友可以参考下
    2014-07-07
  • python利用拉链法实现字典方法示例

    python利用拉链法实现字典方法示例

    这篇文章主要介绍了python利用拉链法实现字典的方法,文中给出了详细的示例代码,相信对大家具有一定的参考价值,需要的朋友可以们下面来一起看看吧。
    2017-03-03
  • Python使用pandasai实现数据分析

    Python使用pandasai实现数据分析

    本文主要介绍了Python使用pandasai实现数据分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06

最新评论