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 性能比较相关推荐

  1. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  2. Go 学习笔记(81)— Go 性能分析工具 pprof

    Go 语言工具链中的 go pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU消耗 .内存分配及阻塞分析 .具体作用如下: 性能分析首先需要使用 runtime.pprof 包嵌入到待分 ...

  3. pyspark性能调优参数

    20220311 参数调节 把executor数量调小,其他参数值调大,不容易报错 一.指定spark executor 数量的公式 executor 数量 = spark.cores.max/spa ...

  4. 矩阵乘法的性能提升 AutoKernel

    随着AI技术的快速发展,深度学习在各个领域得到了广泛应用.深度学习模型能否成功在终端落地应用,满足产品需求,一个关键的指标就是神经网络模型的推理性能.于是,一大波算法工程师为了算法的部署转岗算子优化工 ...

  5. TensorFlow与PyTorch模型部署性能比较

    TensorFlow与PyTorch模型部署性能比较 前言 2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界.这种说 ...

  6. App性能分析数据监控

    App性能分析数据监控 APP的性能监控包括: CPU 占用率.内存使用情况.网络状况监控.启动时闪退.卡顿.FPS.使用时崩溃.耗电量监控.流量监控等等. 文中所有代码都已同步到github中,有兴 ...

  7. Yolo v4, v3 and v2 性能极简图示

    Yolo v4, v3 and v2 性能图示 https://github.com/AlexeyAB/darknet 参考链接: https://github.com/AlexeyAB/darkne ...

  8. Arm Cortex-M4 MCU性能

    Arm Cortex-M4 MCU性能 基于ARM Cortex-M和RISC-V内核,提供了丰富的产品组合和全面的软硬件支持. Arm Cortex-M4 MCU 基于Arm® Cortex®-M4 ...

  9. Arm Cortex-M3 MCU性能

    Arm Cortex-M3 MCU性能 基于ARM Cortex-M和RISC-V内核,研发出来了产品组合和全面的软硬件支持. Arm Cortex-M3 MCU 基于Arm® Cortex®-M3内 ...

最新文章

  1. 2017年5个最佳网络监控工具 你知道哪些
  2. htmlunit 发http请求
  3. NetBeans 时事通讯(刊号 # 20 - Aug 11, 2008)
  4. visual studio 2005没有chart空间_彭啸专访:2005年的国少跳级生 天赋+汗水造就成功...
  5. %rowtype mysql_Oracle %type和%rowtype小实例
  6. NUMA架构的CPU -- 你真的用好了么?
  7. Python学习笔记(三)Python安装及设置环境变量
  8. Eclipse中文乱码解决汇总(应该比较全):
  9. Jstatd方式远程监控Linux下 JVM运行情况
  10. 数学单位M和单位B是什么意思
  11. 冯诺依曼体系结构(现代计算机的原型)+cpu的两个核心指标
  12. Java入门(四)JAVA SE 02
  13. Steam 上的软件 Wallpaper Engine体验
  14. Python Fitter 判断数据样本的分布函数拟合
  15. Kotlin快速学习之路(完整版)
  16. 时间都知道 作者: 随侯珠 txt格式下载
  17. M1 MacBook 苹果电脑安装brew
  18. Altium常用快捷键
  19. “无实物尝百味”通过控制微电流刺激产生味觉—4.味觉模式实现篇
  20. 秒杀Servlce接口设计

热门文章

  1. Div2 D. Range and Partition(构造,前缀和+二分枚举)
  2. c语言menu的用法,menu的用法总结大全
  3. 集合Collection总结
  4. 想做好人物角色模型,第一步了解人体的构造!
  5. Django工程中使用echarts怎么循环遍历显示数据
  6. 两种计算Java对象大小的方法
  7. C++学生志愿填报信息管理系统
  8. job - ORA-01008 并非所有变量都已绑定
  9. html/jsp实现点击左侧目录/菜单,右侧加载不同效果的功能
  10. Mac苹果电脑MacBook Air、MacBook Pro怎么安装win10双系统或Windows软件