iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >异步编程之asyncio简单介绍
  • 509
分享到

异步编程之asyncio简单介绍

简单asyncio 2023-01-30 23:01:50 509人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

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

引言:

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

asyncio是做什么的?

===>>  python3.0时代,标准库里的异步网络模块:select(非常底层)

===>>  python3.0时代,第三方异步网络库:Tornado

===>>  python3.4时代,asyncio:支持tcp,子进程.直接内置了对异步IO的支持。

现在的asyncio,有了很多的模块已经在支持:aioHttp,aiodns,aioRedis等等.asyncio是python3.4版本引入到标准库,python2x没有加这个库.

在学习asyncio之前,我们先来理清楚同步/异步的概念:

  ★同步是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行。

  异步是和同步相对的,异步是指在处理调用这个事务的之后,不会等待这个事务的处理结果,直接处理第二个事务去了,通过状态、通知、回调来通知调用者处理结果。

官网对于asyncio的描述:

  • Asynchronous I/O(异步 I/O)。当代码需要执行一个耗时的 I/O 操作的时候, 它只发出 I/O 的指令, 并不等待 I/O 的结果, 然后去执行其它的代码, 以提高效率。
  • event loop(事件循环)。把基本的 I/O 操作转换为需要处理的事件, 通过事件循环做事件的监测和事件触发等处理工作。
  • coroutines(协程)。线程是由操作系统控制切换的, 使用协程可以收回控制权, 并且将异步编程同步化, 注册到事件循环中的事件处理器就是协程对象, 它由事件循环来调用, 当程序阻塞等待读取或者写入数据的时候, 进行上下文的切换可以让效率最大化。
  • tasks(任务)。asyncio 模块非常容易和方便的执行并发任务, 并且可以实现创建、取消等管理任务。
  • future: 代表将来执行或没有执行的任务的结果。它和task上没有本质上的区别.
  • async/await 关键字:python3.5用于定义协程的关键字,async定义一个协程,await用于挂起阻塞的异步调用接口。

示例:

下面通过举例来对比同步代码和异步代码编写方面的差异,其次看下两者性能上的差距,我们使用sleep(1)模拟耗时1秒的io操作。

 ·同步代码:

import time

def hello():
    time.sleep(1)

def run():
    for i in range(5):
        hello()
        print('Hello World:%s' % time.time()) 
if __name__ == '__main__':
    run()

执行结果:(间隔约为1s)

·异步代码

import time
import asyncio

# 定义异步函数 通过async关键字定义一个协程(coroutine)
async def hello():
    asyncio.sleep(1)
    print('Hello World:%s' % time.time())

def run():
    for i in range(5):
        # 执行coroutine
        loop.run_until_complete(hello())

# 获取EventLoop:
loop = asyncio.get_event_loop()
if __name__ =='__main__':
    run()

执行结果:

在上面带中我们通过async关键字定义一个协程(coroutine),当然协程不能直接运行,需要将协程加入到事件循环loop中,asyncio.get_event_loop:创建一个事件循环,然后使用run_until_complete将协程注册到事件循环,并启动事件循环.

 



--结束END--

本文标题: 异步编程之asyncio简单介绍

本文链接: https://www.lsjlt.com/news/180895.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 异步编程之asyncio简单介绍
    引言: python由于GIL(全局锁)的存在,不能发挥多核的优势,其性能一直饱受诟病。然而在IO密集型的网络编程里,异步处理比同步处理能提升成百上千倍的效率,弥补了python性能方面的短板. asyncio是做什么的 异步网络操作 ...
    99+
    2023-01-30
    简单 asyncio
  • Node.js 异步编程之 Callback介绍(一)
    Node.js 基于 JavaScript 引擎 v8,是单线程的。Node.js 采用了与通常 Web 上的 JavaScript 异步编程的方式来处理会造成阻塞的I/O操作。在 Node.js 中读取文...
    99+
    2022-06-04
    Node js Callback
  • asyncio异步编程之Task对象详解
    目录1.Task对象的作用2.如何创建task对象3.示例一(目前不推荐这种写法)4.示例25.示例3(算是以上示例2的简化版)总结1.Task对象的作用 可以将多个任务添加到事件循...
    99+
    2022-11-13
  • Javascript异步编程简介
    这篇文章主要介绍“Javascript异步编程简介”,在日常操作中,相信很多人在Javascript异步编程简介问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Javascri...
    99+
    2022-10-19
  • JavaScript异步编程操作实现介绍
    目录异步编程同步模式与异步模式同步模式(Synchronous)异步模式(Asynchronous)回调函数PromisePromise基本用法Promise使用案例Promise常...
    99+
    2022-11-13
  • Pythonasyncio异步编程简单实现示例
    目录一、asyncio事件循环简介二、async协程函数简介三、await关键字四、async异步编程简单实现今天继续给大家介绍Python相关知识,本文主要内容是Python as...
    99+
    2023-01-18
    Python asyncio异步 Python asyncio
  • .NET异步编程模式的三种类型介绍
    一、引言 .NET中很多的类、接口在设计的时候都考虑了多线程问题,简化了多线程程序的开发,不用自己去写WaitHandler等这些底层的代码,由于历史的发展,这些类的接口设计有着三种...
    99+
    2022-11-13
  • 微信小程序 ——入门介绍及简单的小程序编写
    14天阅读挑战赛自己决定的事情,就要不动声色的一往直前! 目录 一、小程序入门 1.1 什么是小程序 1.2 小程序的优点 1.3 小程序注册 1.4 安装开发工具 1.5 创建第一个小程序 二、小程序目录结构及入门案例 2.1 目录结构...
    99+
    2023-10-18
    java 微信小程序 小程序
  • 数据库之SQL注入原理以及过程的简单介绍
    1、产生SQL注入原因 开发代码的时候没有全面考虑到网络安全性,特别是在用户交互时,没有考虑到用户提交的信息中可能破坏数据库,没有对输入的数据进行合法的过滤。SQL 注入过程目的性是...
    99+
    2022-11-12
  • path 框架:让 Python 异步编程变得更简单
    Path 框架:让 Python 异步编程变得更简单 Python 是一种非常流行的编程语言,特别是在数据科学和机器学习领域。然而,Python 在处理大量并发请求时可能会遇到性能瓶颈。这时候异步编程就成为了解决问题的一种有效方法。Path...
    99+
    2023-11-10
    异步编程 框架 path
  • Flutter 异步编程之单线程下异步模型图文示例详解
    目录一、 本专栏图示概念规范1. 任务概念规范2. 任务的状态3. 时刻与时间线4.同步与异步二、理解单线程中的异步任务1. 任务的分配2.异步任务特点3. 异步任务完成与回调三、 ...
    99+
    2022-11-13
  • 异步编程让ASP数组操作更简单,LeetCode算法帮你掌握。
    异步编程让ASP数组操作更简单,LeetCode算法帮你掌握 在ASP中,经常需要对数组进行操作,比如查找、排序、过滤等等。但是,对于大数组或者复杂的操作,同步编程模式会导致程序响应缓慢,甚至出现假死状态。异步编程则可以解决这个问题,提高程...
    99+
    2023-11-12
    数组 异步编程 leetcode
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作