pyzmq--ProcessDevice、ProcessProxy、monitored_queue 性能比较
pyzmq----ProcessDevice、ProcessProxy、monitored_queue 性能比较
说明
ProcessDevice、ProcessProxy、monitored_queue 在队列转发性能比较,
测试数据:单进程顺序 50w条信息
客户端脚本
- 顺序PUB发送50w条数据
# 测试数据发送脚本
import zmq
import timestate_url = 'tcp://127.0.0.1:5607'
log_url = 'tcp://127.0.0.1:5606'def log_client():topic = b'logTestV1'ctx = zmq.Context.instance()state_socket = ctx.socket(zmq.REQ)state_socket.connect(state_url)state_socket.send_multipart([b'INIT', topic])resp = state_socket.recv_multipart()print(resp)print('准备写入日志')log_pub = ctx.socket(zmq.PUB)log_pub.hwm = 30000log_pub.connect(log_url)time.sleep(1)for i in range(500000):print(i)log_pub.send_multipart([topic, f'日志写入测试日志写入测试:{i}\n'.encode('utf-8')])print(f'{topic}发送完毕')time.sleep(60 * 2)log_client()
服务端转发部分代码
- ProcessDevice 、ProcessProxy 涉及代码
- ProcessDevice 、ProcessProxy 都是在新的进程中启动
def log_queue_device(self):"""转发进程队列设备:return:"""if self.concurrency == 'process':# pd = ProcessDevice(zmq.QUEUE, zmq.SUB, zmq.PUB)pd = ProcessProxy(zmq.SUB, zmq.PUB)else:pd = ThreadDevice(zmq.QUEUE, zmq.SUB, zmq.PUB)pd.bind_in(self.in_url)pd.bind_out(self.out_url)pd.setsockopt_in(zmq.SUBSCRIBE, b'')pd.setsockopt_in(zmq.RCVHWM, RCV_HWM_VALUE)pd.setsockopt_out(zmq.SNDHWM, SND_HWM_VALUE)return pd
- monitored_queue 函数使用,该函数用Cython写的,因此循环不涉及Python。理论上性能会比较好。
- log_monitored_queue 通过 multiprocessing.Process 启动,在一个新的进程中运行
from zmq.devices import monitored_queuedef log_monitored_queue(in_url, out_url, RCV_HWM_VALUE, SND_HWM_VALUE):ctx = zmq.Context.instance()ins = ctx.socket(zmq.SUB)ins.setsockopt(zmq.SUBSCRIBE, b'')ins.setsockopt(zmq.RCVHWM, RCV_HWM_VALUE)ins.bind(in_url)outs = ctx.socket(zmq.PUB)outs.setsockopt(zmq.SNDHWM, SND_HWM_VALUE)outs.bind(out_url)mons = ctx.socket(zmq.PUB)mons.bind('inproc://MonQueue')monitored_queue(ins, outs, mons)
结论
三种模式,性能差不多,我测试项目是一个分布式日志项目,测试环境是我个人笔记本电脑,结果仅供参考
模式 | 耗时 |
---|---|
ProcessDevice | 1分22秒 |
ProcessProxy | 1分16秒 |
monitored_queue | 1分22秒 |
pyzmq--ProcessDevice、ProcessProxy、monitored_queue 性能比较相关推荐
- kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势
陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...
- Go 学习笔记(81)— Go 性能分析工具 pprof
Go 语言工具链中的 go pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU消耗 .内存分配及阻塞分析 .具体作用如下: 性能分析首先需要使用 runtime.pprof 包嵌入到待分 ...
- pyspark性能调优参数
20220311 参数调节 把executor数量调小,其他参数值调大,不容易报错 一.指定spark executor 数量的公式 executor 数量 = spark.cores.max/spa ...
- 矩阵乘法的性能提升 AutoKernel
随着AI技术的快速发展,深度学习在各个领域得到了广泛应用.深度学习模型能否成功在终端落地应用,满足产品需求,一个关键的指标就是神经网络模型的推理性能.于是,一大波算法工程师为了算法的部署转岗算子优化工 ...
- TensorFlow与PyTorch模型部署性能比较
TensorFlow与PyTorch模型部署性能比较 前言 2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界.这种说 ...
- App性能分析数据监控
App性能分析数据监控 APP的性能监控包括: CPU 占用率.内存使用情况.网络状况监控.启动时闪退.卡顿.FPS.使用时崩溃.耗电量监控.流量监控等等. 文中所有代码都已同步到github中,有兴 ...
- Yolo v4, v3 and v2 性能极简图示
Yolo v4, v3 and v2 性能图示 https://github.com/AlexeyAB/darknet 参考链接: https://github.com/AlexeyAB/darkne ...
- Arm Cortex-M4 MCU性能
Arm Cortex-M4 MCU性能 基于ARM Cortex-M和RISC-V内核,提供了丰富的产品组合和全面的软硬件支持. Arm Cortex-M4 MCU 基于Arm® Cortex®-M4 ...
- Arm Cortex-M3 MCU性能
Arm Cortex-M3 MCU性能 基于ARM Cortex-M和RISC-V内核,研发出来了产品组合和全面的软硬件支持. Arm Cortex-M3 MCU 基于Arm® Cortex®-M3内 ...
最新文章
- 2017年5个最佳网络监控工具 你知道哪些
- htmlunit 发http请求
- NetBeans 时事通讯(刊号 # 20 - Aug 11, 2008)
- visual studio 2005没有chart空间_彭啸专访:2005年的国少跳级生 天赋+汗水造就成功...
- %rowtype mysql_Oracle %type和%rowtype小实例
- NUMA架构的CPU -- 你真的用好了么?
- Python学习笔记(三)Python安装及设置环境变量
- Eclipse中文乱码解决汇总(应该比较全):
- Jstatd方式远程监控Linux下 JVM运行情况
- 数学单位M和单位B是什么意思
- 冯诺依曼体系结构(现代计算机的原型)+cpu的两个核心指标
- Java入门(四)JAVA SE 02
- Steam 上的软件 Wallpaper Engine体验
- Python Fitter 判断数据样本的分布函数拟合
- Kotlin快速学习之路(完整版)
- 时间都知道 作者: 随侯珠 txt格式下载
- M1 MacBook 苹果电脑安装brew
- Altium常用快捷键
- “无实物尝百味”通过控制微电流刺激产生味觉—4.味觉模式实现篇
- 秒杀Servlce接口设计
热门文章
- Div2 D. Range and Partition(构造,前缀和+二分枚举)
- c语言menu的用法,menu的用法总结大全
- 集合Collection总结
- 想做好人物角色模型,第一步了解人体的构造!
- Django工程中使用echarts怎么循环遍历显示数据
- 两种计算Java对象大小的方法
- C++学生志愿填报信息管理系统
- job - ORA-01008 并非所有变量都已绑定
- html/jsp实现点击左侧目录/菜单,右侧加载不同效果的功能
- Mac苹果电脑MacBook Air、MacBook Pro怎么安装win10双系统或Windows软件