当前位置: 首页 > news >正文

python3 使用 asyncio 代替线程

python3提供了协程专用的关键字 async await, 还提供了 asyncio库, 来进行异步非阻塞的io操作

异步非阻塞的io操作?

没有老师检查我也不知道自己算不算完全懂了, 就不做无用功尝试说得通俗易懂了.
想要从原理开始理解的话, 推荐tornado的文档

我为何使用asyncio来代替传统线程进行io操作?

  • 由于时间主要耗费在io操作上, 其他操作并发需求不大.
  • 不用规定并行多少, 比较方便稳定.
  • 熟悉tornado工作原理

举例

并行访问某网页十次

import asyncio
import requests
loop = asyncio.get_event_loop()
async def t():                                                    
    get = lambda:requests.get('http://baidu.com')
    temp = await loop.run_in_executor(None, get)
    print(temp)   
loop.run_until_complete(asyncio.gather(*[t() for i in range(10)]))

上面这几行代码就可以完成这些操作了.

loop = asyncio.get_event_loop() 协程本身并不具备并行能力, 但是有了这个事件loop就可以进行并行io请求

get = lambda:requests.get('http://baidu.com')
temp = await loop.run_in_executor(None, get)

一般函数是无法被await修饰的, 必须用api封装一下(感觉很像threading), 我之所以再封装一次get, 是因为run_in_executor传参数比较坑, 不支持**kwargs

loop.run_until_complete(asyncio.gather(*[t() for i in range(10)]))

run_until_complete这个api是指运行内容物直到结束(api如其名), gather是把任务组合到一起, 如果*的部分有迷惑的话, 你写asycio.gather(t(),t(), t()...)也是可以的.

おわり.

相关文章:

  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • kubernetes集群配置dns服务
  • VC窗口类的销毁-是否需要delete
  • 浅谈node中的流stream(一)
  • 源码解读之ArrayList
  • FIR基本型仿真_03
  • springboot(十九):使用Spring Boot Actuator监控应用
  • Spring源码系列:依赖注入(四)-总结
  • react native android 真机调试
  • WeexConf 2018干货系列|Weex + Ui
  • CSS最常用的三种选择器
  • GridView中使用CheckBox
  • 使用Python读写csv文件的三种方法
  • jdk动态代理使用及原理
  • mariadb/mysql使用Navicat连接报错
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Flex布局到底解决了什么问题
  • HTML5新特性总结
  • JAVA之继承和多态
  • mysql_config not found
  • nodejs:开发并发布一个nodejs包
  • PV统计优化设计
  • React-flux杂记
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue2.x学习三:事件处理生命周期钩子
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • zookeeper系列(七)实战分布式命名服务
  • 基于遗传算法的优化问题求解
  • 聊聊directory traversal attack
  • 面试遇到的一些题
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何学习JavaEE,项目又该如何做?
  • 为什么要用IPython/Jupyter?
  • 一份游戏开发学习路线
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • ​力扣解法汇总946-验证栈序列
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • (done) 两个矩阵 “相似” 是什么意思?
  • (JS基础)String 类型
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (poj1.2.1)1970(筛选法模拟)
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm高校实验室 毕业设计 800008
  • (蓝桥杯每日一题)love
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .htaccess配置重写url引擎
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .net连接MySQL的方法
  • [C++][基础]1_变量、常量和基本类型