目录

  • 什么是异步与异步的好处
  • 异步与多线程多进程
  • async , await,asyncio模块的使用
  • gevent 异步模块的使用

什么是异步与异步的好处

异步与多线程多进程

  • 轻量级的线程——协程
  • 可以获取异步函数的返回值
  • 主进程需要异步才行
  • 更适合文件读写使用

async与await关键字

  • async定义异步
  • await执行异步
  • 例子
async def test() :return 'a'
async def handle() :result = await test()

主程序如何执行异步函数呢?
if __name__=='__main_' :???

asyncio调用async函数

async def main():result = await asyncio.gather(a(),  # a和b是声明异步的函数b())print( result)
if __name__ == '__main__':asyncio.run(main())

实战

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time     : 2021/8/28 16:25
# @Author   : InsaneLoafer
# @File     : async_1.pyimport os
import time
import random
import asyncioasync def a():for i in range(10):print(i, 'a', os.getpid())await asyncio.sleep(random.random() * 2)return 'a function'async def b():for i in range(10):print(i, 'b', os.getpid())await asyncio.sleep(random.random() * 2)return 'b function'async def main():result = await asyncio.gather(a(),b())print(result[0], result[1])if __name__ == '__main__':start = time.time()asyncio.run(main())print(time.time() - start)print('parent pid is %s' % os.getpid())
0 a 42188
0 b 42188
1 a 42188
1 b 42188
2 a 42188
3 a 42188
4 a 42188
2 b 42188
5 a 42188
3 b 42188
4 b 42188
5 b 42188
6 a 42188
6 b 42188
7 b 42188
7 a 42188
8 b 42188
8 a 42188
9 a 42188
9 b 42188
a function b function
9.78639006614685
parent pid is 42188Process finished with exit code 0

time.sleep()是cpu级别的阻塞,而await asyncio.sleep()gevent.sleep()是异步阻塞,只是对当前业务的阻塞。

gevent

  • pip install gevent
  • windows环境需要安装依赖:Microsoft Visual C++
  • 有些linux环境需要安装依赖:pip install wheel

gevent模块常用方法

实战

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time     : 2021/8/28 16:25
# @Author   : InsaneLoafer
# @File     : async_1.pyimport os
import time
import random
import asyncio
import geventdef gevent_a():for i in range(5):print(i, 'gevent_a', os.getpid())gevent.sleep(random.random() * 2)return 'gevent_a result'def gevent_b():for i in range(5):print(i, 'gevent_b', os.getpid())gevent.sleep(random.random() * 2)return 'gevent_b result'async def a():for i in range(10):print(i, 'a', os.getpid())await asyncio.sleep(random.random() * 2)return 'a function'async def b():for i in range(10):print(i, 'b', os.getpid())await asyncio.sleep(random.random() * 2)return 'b function'async def main():result = await asyncio.gather(a(),b())print(result[0], result[1])if __name__ == '__main__':start = time.time()# asyncio.run(main())g_a = gevent.spawn(gevent_a)g_b = gevent.spawn(gevent_b)gevent_list = [g_a, g_b]result = gevent.joinall(gevent_list)print(result[0].value)print(result[1].value)print(time.time() - start)print('parent pid is %s' % os.getpid())
0 gevent_a 14832
0 gevent_b 14832
1 gevent_b 14832
1 gevent_a 14832
2 gevent_b 14832
2 gevent_a 14832
3 gevent_b 14832
4 gevent_b 14832
3 gevent_a 14832
4 gevent_a 14832
gevent_b result
gevent_a result
6.099842071533203
parent pid is 14832Process finished with exit code 0

Python中的异步相关推荐

  1. python processpoolexector 释放内存_一起看看python 中日志异步发送到远程服务器

    在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数 ...

  2. 『Python学习笔记』Python中的异步Web框架之fastAPI介绍RestAPI

    Python中的异步Web框架之fastAPI介绍&RestAPI 文章目录 一. fastAPI简要介绍 1.1. 安装 1.2. 创建 1.3. get方法 1.4. post方法 1.5 ...

  3. erlang 怎么获得socket中的属性_技术干货,python中的异步网络框架socketserver

    简介 SocketServer是python基础库中提供的高级应用库, 主要用来编写异步服务程序. 最近工作原因需要写虚拟的外围服务程序, 正好了解到了这个, 所以写篇文章记录一下使用心得 在pyth ...

  4. 高并发 python socket send 异步_在Python中使用异步Socket编程性能测试

    ok,首先写一个python socket的server段,对开放三个端口:10000,10001,10002.krondo的例子中是每个server绑定一个端口,测试的时候需要分别开3个shell, ...

  5. 理解 Python 中的异步编程

    为什么80%的码农都做不了架构师?>>>    让我们来写一些 Python 代码 你可以在这个 GitHub 仓库 下载所有的示例代码. 这篇文章中的所有例子都已经在 Python ...

  6. python异步处理请求_如何一次在python中发送异步http请求?

    1)创建一个Queue.Queue对象 2)根据您的喜好制作尽可能多的"工作"线程,从Queue.Queue读取 3)将作业提供给Queue.Queue 工作线程将按照它们放置的顺 ...

  7. python中的异步与同步

    异步: 多任务, 多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线 同步: 多任务, 多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才 ...

  8. python中的异步非阻塞 async await

    from time import time, sleep"""同步操作 """ def app01():def fn1():sleep(3) ...

  9. 它号称 Python 中性能最高的异步 Web 框架:超详细 Sanic 入门指南!

    △点击上方"Python猫"关注 ,回复"2"加入交流群 作者:古明地盆 来源:https://www.cnblogs.com/traditional/p/14 ...

最新文章

  1. html:(5):了解html的代码注释和语义化
  2. c# 多线程 执行事件 并发_.NET异步和多线程系列(一)
  3. SCCM2007系列教程之九SCCM站点备份和恢复
  4. 串口通信(232,485,422)以及常见问题
  5. origin数据平滑_Origin平滑曲线怎么设置?平滑曲线处理方法讲解
  6. 论文的字数是怎么算的
  7. 文秘计算机考核,行政文秘绩效考核
  8. python校园网站毕业设计开题报告
  9. 基于C++的深度学习模型部署
  10. vue实现动态二维码完成签到功能
  11. cpan安装软件时报错
  12. Docker入门实战看这篇就够了(最新详细以及踩过的坑)
  13. 高通WCD9370音频编解码器模块芯片介绍
  14. eGPU 能否一战?- Tensorflow GPU 基准测试
  15. 软件评测师证书有什么用,前景怎样啊?
  16. 微信公众号可以改名称了,只限个人订阅号!
  17. HNOI 2012 永无乡
  18. Cisco网络技术基础实训
  19. 台达DVP ES系列plc与3台台达MS300变频器通讯程序 实现频率设定,启停控制,实际频率读取等
  20. 一个小程序云开发教程实例

热门文章

  1. bmp格式转换lcd屏幕c语言,BMP转成C语言数组文件工具(用image2lcd代替bmp2h.exe)
  2. C# 获取行政区划代码(省、市、区、街道、村)
  3. 转载redis安装使用
  4. 官方论文还没出,刷爆AI圈的DALL·E刚发布就被复现?两天800 star!
  5. Java连接SQL数据库
  6. 计算机毕业生怎么参加清华暑校,参加完清华暑校,接下来一年该怎么上清华?...
  7. 情报+语音助理=语音机器人
  8. Python行业现状
  9. 想尝试 Web3 工作?看这篇文章就够了
  10. 微信号被封了怎么办?