首页 > 编程语言 >(一)asyncio的基本使用框架,python高效处理数据,asyncio.gather(),asyncio. create_task(),asyncio.run(main())

(一)asyncio的基本使用框架,python高效处理数据,asyncio.gather(),asyncio. create_task(),asyncio.run(main())

时间:2023-04-26 15:14:43浏览次数:47  
标签:task 协程 循环 事件 run main asyncio

asyncio 是 Python 3.4 引入的标准库,是一个基于事件循环的异步 I/O 并发库。它提供了一种协作式的多任务处理方式,使得我们能够在一个线程中并发处理多个 I/O 操作。它通过将 I/O 操作转化为异步的非阻塞调用,从而实现了高效的并发处理。其原理如下:

 

  1. 定义协程(coroutine):使用关键字 async def 定义一个协程函数,它是一种特殊的函数,可以暂停执行并在稍后恢复执行。

  2. 创建一个事件循环(event loop):事件循环是一个无限循环,它不断地等待事件的发生并处理这些事件。在事件循环中,我们可以注册协程、定时器和回调函数等事件。

  3. 启动事件循环:调用事件循环的 run_until_complete() 方法,将协程注册到事件循环中并启动事件循环。

  4. 在协程中使用 await:使用关键字 await 可以暂停当前协程的执行,等待另一个协程或异步操作完成后再恢复执行。

下面是一个使用 asyncio 实现异步框架程序的示例,创建一个任务列表,列表中有 100 个任务,每个任务是返回一个数字,数字从 0 开始。

import asyncio

async def get_number(n):
    await asyncio.sleep(1)  # 模拟耗时操作
    return n

async def main():
    tasks = []
    for i in range(100):
        tasks.append(asyncio.create_task(get_number(i)))
    numbers = await asyncio.gather(*tasks)
    print(numbers)

if __name__ == '__main__':
    asyncio.run(main())

上述代码中,我们定义了一个 get_number() 协程函数,它模拟一个耗时操作并返回一个数字。然后我们在 main() 协程中创建了一个包含 100 个任务的任务列表,每个任务都是调用 get_number() 函数。最后,我们使用 asyncio.gather() 方法等待所有任务完成,并打印出所有数字。在最后,我们使用 asyncio.run() 函数来启动事件循环。这个示例程序使用 asyncio 实现了一个简单的异步框架,可以在一个线程中同时处理多个 I/O 操作,提高程序的并发能力。  

 

标签:task,协程,循环,事件,run,main,asyncio
From: https://www.cnblogs.com/LiuXinyu12378/p/17356133.html

相关文章

  • MySQL主从复制Slave_IO_Running为No
    主要记录解决问题的过程,为以后发现类似问题提供解决方法的参考。首先查看从机的mysql日志文件:tail/var/log/mysqld.log日志从上往下看,可以很快看到在中间位置上有一个ERROR的标志,后面写得很清楚,我的主机UUID和从机UUID重复了,而这两个UUID在这里要求必须要不相等的,所以我上面......
  • python 快速替换csv数据集字符串列表中的表情符号为空,asyncio,re,pandas
     传统的字符串列表替换字符串使用遍历非常慢比如下面这段代码,如果处理几十万或上百万的数据集时,会非常的慢,几小时几天都可能importrep=re.compile(u'['u'\U0001F300-\U0001F64F'u'\U0001F680-\U0001F6FF'u'\u2600-\u2B55\U00010000-\U0010ffff]+')#text="超详细修......
  • This dataset does not have valid histogram required for classification method, r
     此数据集没有分类方法所需的有效直方图,请运行“计算统计信息”工具生成直方图。参考1:https://blog.csdn.net/soderayer/article/details/125409022参考2:https://blog.csdn.net/aGang_Gg/article/details/86690749 计算栅格统计信息......
  • CentOS7修改开机启动模式:命令行模式(runlevel=3)
    1.打开文件/etc/inittab: sudo/etc/inittab显示当前的runlevel:systemctlget-default设置默认的运行级别:systemcltset-defaultXX.target。XX可以是multi-user或者graphical按照提示在终端中执行命令:systemctlset-defaultmulti-user.target注意:按照inittab文件中的提......
  • pig grunt shell详解
    输入 pig-xlocal 此时pig和本地的文件系统交互省略 “-xlocal”,pig和hdfs交互1、在pig中执行HDFS的命令grunt>fs-ls/Found5itemsdrwxr-xr-x -rootsupergroup     02013-01-3014:32/datadrwxr-xr-x -rootsupergroup     02......
  • Eclipse用【 Runnable JAR file】方式打jar包,并用该jar包进行二次开发
     转发:https://www.cnblogs.com/zhangchao0515/p/9520827.html 2.eclipse用Export的RunnableJARfile方式打jar包(带jar包的)右键该项目选择Export,弹出的对话框,选择Java中的RunnableJARFile点击next    Launchconfiguration  选择jar包默认运行的主类(包含main方......
  • 【踩坑】.NET异步方法不标记async,Task<int> 返回值 return default问题
    ​        在.NET中,返回类型为 Task<T> 的方法并不一定要标记为 async。这是因为 async 关键字只是用来告诉编译器该方法中包含异步操作,并且可以使用 await 和其他异步特性(如 Task.WhenAll)来等待异步操作完成。如果一个方法中没有使用 await 或者其他异步特性......
  • Access和Trunk数据传输
    vlan中有两种接口模式access和trunk下面我们分析下这张两种的数据传输模式。我们知道交换机之间传输的是二层数据帧格式的,所以它的报文是下面的vlan帧格式就是在原始帧的源目mac地址和type之间加入了tag标签。我们就按照上图为例讲一下:access接口:access是单一链路,只能承载一个vlanS......
  • use a script run by gromacs to analysis protein protein complex dynamic
    usinggromacstowriteascriptforprotein-proteincomplexmoleculerdynamicsfromforcefieldselectiontotrajectoryanalyzestepbystep,andgiveannotationtoeachlineGROMACSisapowerful moleculardynamicssoftwarepackage usedforsimulati......
  • Java中Runnable和Callable的区别 Runnable接口
    Callable接口从Java1.0开始,它是java.lang包的一部分从Java1.5开始,它是java.util.concurrent包的一部分。Runnable接口不能返回计算的结果。Callable接口可以返回一个任务的并行处理的结果。Runnable接口不能抛出一个有检查的异常。Callable接口可以抛出一个有检查的异常。......