Python 中的异步 for 循环

这篇具有很好参考价值的文章主要介绍了Python 中的异步 for 循环。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


本篇文章将提供有关 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 函数中编写这些函数的顺序排列。文章来源地址https://www.toymoban.com/news/detail-465523.html

到了这里,关于Python 中的异步 for 循环的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • html5提供的FileReader是一种异步文件读取文件中的数据

    前言:FileReader是一种异步文件读取机制,结合input:file可以很方便的读取本地文件。 input:file 在介绍FileReader之前,先简单介绍input的file类型。 input type=\\\"file\\\" id=\\\"file\\\" input的file类型会渲染为一个按钮和一段文字。点击按钮可打开文件选择窗口,文字表示对文件的描述(大部分情

    2024年02月11日
    浏览(46)
  • POLARDB IMCI 白皮书 云原生HTAP 数据库系统 一 数据压缩打更新 (本篇有数据到列节点异步但不延迟的解释)...

    开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共1300人左右 1 + 2 + 3 + 4) 3群即将突破 400 会关闭自由申请,新人会进4群 这

    2024年02月07日
    浏览(45)
  • Java中的for循环

        for循环是Java程序中设计使用最多的循环语句之一。一个for循环可以用来重复执行某个语句直到条件得到满足。 在Java中,for是一种,是一种循环结构的引导词 代码如下: 在这个例子中,x是循环的变量,它被初始化为0,每次循环x加1直到x10,而x加1也可以写成x++;这

    2024年02月12日
    浏览(35)
  • verilog中的for 循环

    例1. 令x=3,仿真结果 综合结果: for循环n次代表有n个相似的电路模块存在;代码上的“循环反馈”结构在阻塞赋值时代表前后有关联 综合结果既不是一个加法器循环三次(C语言),也不是三个并联的加法器(generate for),而是三个加法器串联 注: input [7:0] n Error (10119): Verilog HD

    2023年04月10日
    浏览(38)
  • 【C语言趣味教程】(12) 循环语句Ⅱ:for 循环 | for 循环的嵌套 | for 的省略 | 死循环 for(;;) | 左闭右开写法 | for 语句中的 break 和 continue

        🔗 《C语言趣味教程》👈 猛戳订阅!!! 0x00 引入:什么是 for 循环? for 循环 (For cycle) 是 C 语言中的一种循环语句,用于重复执行一段相同的或者类似的代码逻辑。 for 循环的为 for ,后面跟着括号,括号中有 3 个表达式,每个表达式用 ; 区隔开来: 📚 这 \\\"三

    2024年02月03日
    浏览(74)
  • Go for循环中的defer

    写个后台程序,定时抓取服务器指标,代码逻辑如下,使用一段时间后内存不断增加 一开始感觉是哪里文件或者网络忘记Close了,看下进程打开的文件. 如下图类似情况, 看到很多http ESTABLISHED状态,估计就是哪个http忘记Close. 排查代码,问题应该出现在上面一段代码,for循环中

    2024年02月09日
    浏览(30)
  • verilog中的3种for循环的写法

    直接进入正题,对于for循环的三种循环做以下介绍: for循环用于例化多个模块 注意点: (1)例化模块在for循环内部 (2)for循环需加名字 (3)genvar 定义在generate外面,可以全局使用(不推荐使用,最好一个generate for,对应一个循环变量) for循环写多个always块或者写多个

    2023年04月11日
    浏览(38)
  • vue中的v-for循环

    如果是一个变量,那么保存的是对象中的属性值 如果是两个变量,那么第一个变量保存的是属性值,第二个变量保存的是属性名 如果是三个变量,那么第一个变量保存的是属性值,第二个变量保存的是属性名,第三个变量保存的是下标 v-for=\\\"o1 in obj\\\"          o1:属性值 v-f

    2024年01月17日
    浏览(39)
  • matlab中的foreach、for in 循环、迭代器

    I 是个行向量,对于行向量,可以像上面的语法那样在 for 循环中使用,遍历 I 中的每一个元素。 如果 I 是列向量,就不行了。 可以看到 a 直接被赋值成整个列向量。 可见,for 循环中被用来迭代的矩阵会被看成只有一行,里面的元素是一个个列向量,for 循环一次取出里面的

    2024年02月11日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包