Python中的异步
目录
- 什么是异步与异步的好处
- 异步与多线程多进程
- 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中的异步相关推荐
- python processpoolexector 释放内存_一起看看python 中日志异步发送到远程服务器
在python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直接写入数 ...
- 『Python学习笔记』Python中的异步Web框架之fastAPI介绍RestAPI
Python中的异步Web框架之fastAPI介绍&RestAPI 文章目录 一. fastAPI简要介绍 1.1. 安装 1.2. 创建 1.3. get方法 1.4. post方法 1.5 ...
- erlang 怎么获得socket中的属性_技术干货,python中的异步网络框架socketserver
简介 SocketServer是python基础库中提供的高级应用库, 主要用来编写异步服务程序. 最近工作原因需要写虚拟的外围服务程序, 正好了解到了这个, 所以写篇文章记录一下使用心得 在pyth ...
- 高并发 python socket send 异步_在Python中使用异步Socket编程性能测试
ok,首先写一个python socket的server段,对开放三个端口:10000,10001,10002.krondo的例子中是每个server绑定一个端口,测试的时候需要分别开3个shell, ...
- 理解 Python 中的异步编程
为什么80%的码农都做不了架构师?>>> 让我们来写一些 Python 代码 你可以在这个 GitHub 仓库 下载所有的示例代码. 这篇文章中的所有例子都已经在 Python ...
- python异步处理请求_如何一次在python中发送异步http请求?
1)创建一个Queue.Queue对象 2)根据您的喜好制作尽可能多的"工作"线程,从Queue.Queue读取 3)将作业提供给Queue.Queue 工作线程将按照它们放置的顺 ...
- python中的异步与同步
异步: 多任务, 多个任务之间执行没有先后顺序,可以同时运行,执行的先后顺序不会有什么影响,存在的多条运行主线 同步: 多任务, 多个任务之间执行的时候要求有先后顺序,必须一个先执行完成之后,另一个才 ...
- python中的异步非阻塞 async await
from time import time, sleep"""同步操作 """ def app01():def fn1():sleep(3) ...
- 它号称 Python 中性能最高的异步 Web 框架:超详细 Sanic 入门指南!
△点击上方"Python猫"关注 ,回复"2"加入交流群 作者:古明地盆 来源:https://www.cnblogs.com/traditional/p/14 ...
最新文章
- html:(5):了解html的代码注释和语义化
- c# 多线程 执行事件 并发_.NET异步和多线程系列(一)
- SCCM2007系列教程之九SCCM站点备份和恢复
- 串口通信(232,485,422)以及常见问题
- origin数据平滑_Origin平滑曲线怎么设置?平滑曲线处理方法讲解
- 论文的字数是怎么算的
- 文秘计算机考核,行政文秘绩效考核
- python校园网站毕业设计开题报告
- 基于C++的深度学习模型部署
- vue实现动态二维码完成签到功能
- cpan安装软件时报错
- Docker入门实战看这篇就够了(最新详细以及踩过的坑)
- 高通WCD9370音频编解码器模块芯片介绍
- eGPU 能否一战?- Tensorflow GPU 基准测试
- 软件评测师证书有什么用,前景怎样啊?
- 微信公众号可以改名称了,只限个人订阅号!
- HNOI 2012 永无乡
- Cisco网络技术基础实训
- 台达DVP ES系列plc与3台台达MS300变频器通讯程序 实现频率设定,启停控制,实际频率读取等
- 一个小程序云开发教程实例
热门文章
- bmp格式转换lcd屏幕c语言,BMP转成C语言数组文件工具(用image2lcd代替bmp2h.exe)
- C# 获取行政区划代码(省、市、区、街道、村)
- 转载redis安装使用
- 官方论文还没出,刷爆AI圈的DALL·E刚发布就被复现?两天800 star!
- Java连接SQL数据库
- 计算机毕业生怎么参加清华暑校,参加完清华暑校,接下来一年该怎么上清华?...
- 情报+语音助理=语音机器人
- Python行业现状
- 想尝试 Web3 工作?看这篇文章就够了
- 微信号被封了怎么办?