Asyncio 是一个基于事件循环的异步I/O框架,它提供了高效的协程实现,能够轻松地编写高并发的Python程序。Asyncio 在 Python 3.4 中首次引入,它的核心是事件循环(Event Loop),通过协程实现异步编程,避免了传统线程模型中的锁和线程切换开销,提高了程序的并发性能。

Asyncio的工作原理如下:

  1. 创建一个事件循环(Event Loop)对象
  2. 编写协程函数,使用关键字 async 定义
  3. 将协程函数封装为任务(Task)对象
  4. 将任务对象添加到事件循环中
  5. 启动事件循环,等待协程函数执行完成

下面是一个使用Asyncio实现异步的框架程序的示例,它创建了一个任务列表,列表中有100个任务,每个任务返回一个数字,数字从0开始,使用 run_until_complete 方法等待所有任务完成:

import asyncio

async def task(n):
await asyncio.sleep(1) # 模拟耗时操作
return n async def main():
tasks = [asyncio.create_task(task(i)) for i in range(100)]
results = await asyncio.gather(*tasks)
print(results) if __name__ == '__main__':
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
loop.close()

  

在这个示例中,我们首先定义了一个异步协程函数 task,它模拟了一个耗时的操作,然后我们定义了一个 main 函数,它创建了一个任务列表,包含了100个 task 协程函数的任务,并通过 asyncio.gather 方法等待所有任务完成,并将结果打印出来。

最后,我们使用 asyncio.get_event_loop 方法获取事件循环对象,使用 run_until_complete 方法等待 main 函数执行完成,关闭事件循环。

(二)asyncio的简单使用,python异步高效处理数据,asyncio.get_event_loop(),loop.run_until_complete(main()),loop.close()的更多相关文章

  1. Python 异步编程笔记:asyncio

    个人笔记,不保证正确. 虽然说看到很多人不看好 asyncio,但是这个东西还是必须学的.. 基于协程的异步,在很多语言中都有,学会了 Python 的,就一通百通. 一.生成器 generator ...

  2. Python异步协程(asyncio详解)

    续上篇讲解yield from博客,上篇链接:https://www.cnblogs.com/Red-Sun/p/16889182.html PS:本博客是个人笔记分享,不需要扫码加群或必须关注什么的 ...

  3. python异步编程模块asyncio学习(二)

    尽管asyncio应用通常作为单线程运行,不过仍被构建为并发应用.由于I/O以及其他外部事件的延迟和中断,每个协程或任务可能按一种不可预知的顺序执行.为了支持安全的并发执行,asyncio包含了thr ...

  4. Python异步IO之协程(二):使用asyncio的不同方法实现协程

    引言:在上一章中我们介绍了从yield from的来源到async的使用,并在最后以asyncio.wait()方法实现协程,下面我们通过不同控制结构来实现协程,让我们一起来看看他们的不同作用吧- 在 ...

  5. 带你简单了解python协程和异步

    带你简单了解python的协程和异步 前言 对于学习异步的出发点,是写爬虫.从简单爬虫到学会了使用多线程爬虫之后,在翻看别人的博客文章时偶尔会看到异步这一说法.而对于异步的了解实在困扰了我好久好久,看 ...

  6. python 异步IO( asyncio) 协程

    python asyncio 网络模型有很多中,为了实现高并发也有很多方案,多线程,多进程.无论多线程和多进程,IO的调度更多取决于系统,而协程的方式,调度来自用户,用户可以在函数中yield一个状态 ...

  7. python异步IO编程(二)

    python异步IO编程(二) 目录 开门见山 Async IO设计模式 事件循环 asyncio 中的其他顶层函数 开门见山 下面我们用两个简单的例子来让你对异步IO有所了解 import asyn ...

  8. python异步编程之asyncio(百万并发)

      前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病.然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率,弥补了python性能方面的短板,如最 ...

  9. python异步编程之asyncio

    python异步编程之asyncio   前言:python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病.然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率, ...

  10. 【Python学习之九】asyncio—异步IO

    asyncio 这是python3.4引入的标准库,直接内置对异步IO的支持.asyncio的编程模型就是一个消息循环.从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程 ...

随机推荐

  1. Spring多线程事务处理

    一.背景 本文主要介绍了spring多线程事务的解决方案,心急的可以跳过上面的理论介绍分析部分直接看最终解决方案. 在我们日常的业务活动中,经常会出现大规模的修改插入操作,比如在3.0的活动赛事创建, ...

  2. Zabbix6.0使用教程 (四)—zabbix6.0从源代码安装

    接上篇zabbix部署安装前置要求,本期我们将先讲讲如何从源代码安装zabbix6.0,还在为如何安装使用zabbix的小伙伴可以仔细看看. 一. 安装Zabbix守护进程 1 下载源代码压缩包 前往 ...

  3. clickhouse快速上手和问题记录

    clickhouse官方中文社区实战经验:手把手教你搭建单机clickhouse开发环境 我是用的是centOS7的虚拟机, 官方教程中的:sudo /etc/init.d/clickhouse-se ...

  4. 关于hashCode和equals重写

    规则 只要重写equals,就必须重写hashCode. 用Set存储对象或者用对象作为Map的键时,必须重写hashCode.也就是说,当需要用对象的哈希值来判断对象是否相等时必须重写hashCod ...

  5. ubuntu添加桌面快捷打开方式

    不太喜欢ubuntu开机后空荡荡的桌面,希望可以有些像windows一样的快捷打开方式.看了一些博客,也自己探索了一下,发现了在ubuntu中添加软件自带的桌面快捷打开方式的方法. 在终端 cd /u ...

  6. Android 开发Day2

    我的是小刺猬版本,算是比较新的版本了,还有火烈鸟和蜻蜓版啥的 新建项目(project)点击加号新建就行了.这时我们会选择一个模板作为开发的辅助起点,看上哪个就选哪个就行了.推荐新手选空项目(Empt ...

  7. 首届实时渲染3D动画创作大赛最佳人气奖?你说了算!

    根据评选标准,经过评委组层层选拔,首届实时渲染3D动画创作大赛「最佳人气奖」投票开始啦!!! 本次赛事报名人数达212人,入围作品共40份,其中Omniverse组11份,专业组15份,学生组14份. ...

  8. Android之Window和弹窗问题

    目录介绍 10.0.0.1 Window是什么?如何通过WindowManager添加Window(代码实现)?WindowManager的主要功能是什么? 10.0.0.2 Window概念解析?W ...

  9. 记录-JavaScript常规加密技术

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 当今Web开发中,数据安全是一个至关重要的问题,为了确保数据的安全性,我们需要使用加密技术.JavaScript作为一种客户端编程语言,可 ...

  10. 第145篇:js设计模式注册模式及相应实践

    好家伙,   0.索引  在阿里的低开项目中,使用这种形式去注册组件,我不禁好奇,这到底是个什么玩意 1.概念 在 JavaScript 中,注册模式(Registry Pattern)是一种设计模式 ...