关于Pyzmq介绍

关于Pyzmq介绍

【相关学习推荐:python教程】

Pyzmq介绍

ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程更加简单、简洁和性能更高。

是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ 的明确目标是“成为标准网络协议栈的一部分,之后进入 Linux 内核”。

ZMQ 让编写高性能网络应用程序极为简单和有趣。

ZeroMQ并不是一个对socket的封装,不能用它去实现已有的网络协议。

它有自己的模式,不同于更底层的点对点通讯模式。

它有比tcp协议更高一级的协议。(当然ZeroMQ不一定基于TCP协议,它也可以用于进程间和进程内通讯)

zeromq 并不是类似rabbitmq消息列队,它实际上只一个消息列队组件,一个库。

Pyzmq官网: zeromq.org/languages/python/

Githubgithub.com/zeromq/pyzmqDocszeromq.github.io/pyzmq/Guidezguide.zeromq.org/py:all

Download

pip install pyzmq

Pyzmq的几种模式

1. 请求应答模式(Request-Reply)(rep 和 req)

消息双向的,有来有往,req端请求的消息,rep端必须答复给req端

2. 订阅发布模式 (pub 和 sub)

消息单向的,有去无回的。可按照发布端可发布制定主题的消息,订阅端可订阅喜欢的主题,订阅端只会收到自己已经订阅的主题。发布端发布一条消息,可被多个订阅端同事收到。

3. push pull模式

消息单向的,也是有去无回的。push的任何一个消息,始终只会有一个pull端收到消息.

后续的代理模式和路由模式等都是在三种基本模式上面的扩展或变异。

1. Request-Reply模式(请求响应模型):

客户端在请求后,服务端必须回响应

由客户端发起请求,并等待服务端响应请求。从客户端端来看,一定是一对对发收配对的;

反之,在服务端一定是收发对。服务端和客户端都可以是1:N的模型。通常把1认为是server,N认为是Client。

ZMQ可以很好的支持路由功能(实现路由功能的组件叫做Device),把1:N扩展为N:M(只需要加入若干路由节点)。

从这个模型看,更底层的端点地址是对上层隐藏的。每个请求都隐含回应地址,而应用则不关心它

img

服务端:

sever.py

 import zmq import sys context = zmq.Context() socket = context.socket(zmq.REP) socket.bind("tcp://*:5555") while True:  try:  print("wait for client ...")  message = socket.recv()  print("message from client:", message.decode('utf-8'))  socket.send(message)  except Exception as e:  print('异常:',e)  sys.exit()

登录后复制

客户端:

#client.py

 import zmq import sys context = zmq.Context() print("Connecting to server...") socket = context.socket(zmq.REQ) socket.connect("tcp://localhost:5555") while True:   input1 = input("请输入内容:").strip()  if input1 == 'b':  sys.exit()  socket.send(input1.encode('utf-8'))   message = socket.recv()  print("Received reply: ", message.decode('utf-8'))

登录后复制

2.Publish-Subscribe模式(发布订阅模型):

广播所有client,没有队列缓存,断开连接数据将永远丢失。client可以进行数据过滤。

服务端

server.py

 import zmq import time import sys context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind("tcp://*:5555")  while True:  msg = input("请输入要发布的信息:").strip()  if msg == 'b':  sys.exit()  socket.send(msg.encode('utf-8'))  time.sleep(1)

登录后复制

客户端1

client1.py

 import zmq   context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5555") socket.setsockopt(zmq.SUBSCRIBE,''.encode('utf-8'))  # 接收所有消息 while True:  response = socket.recv().decode('utf-8');  print("response: %s" % response)

登录后复制

客户端2

client2.py

 import zmq context = zmq.Context() socket = context.socket(zmq.SUB) socket.connect("tcp://localhost:5555") socket.setsockopt(zmq.SUBSCRIBE,'123'.encode('utf-8'))  # 消息过滤  只接受123开头的信息 while True:  response = socket.recv().decode('utf-8');  print("response: %s" % response)

登录后复制

3.Parallel Pipeline模式(管道模型):

 由三部分组成,push进行数据推送,work进行数据缓存,pull进行数据竞争获取处理。区别于Publish-Subscribe存在一个数据缓存和处理负载。

当连接被断开,数据不会丢失,重连后数据继续发送到对端。

img

server.py

 import zmq import time  context = zmq.Context() socket = context.socket(zmq.PUSH) socket.bind("tcp://*:5557")  while True:  msg = input("请输入要发布的信息:").strip()  socket.send(msg.encode('utf-8'))  print("已发送")  time.sleep(1)

登录后复制

worker.py

 import zmq context = zmq.Context() receive = context.socket(zmq.PULL) receive.connect('tcp://127.0.0.1:5557') sender = context.socket(zmq.PUSH) sender.connect('tcp://127.0.0.1:5558')  while True:  data = receive.recv()  print("正在转发...")  sender.send(data)

登录后复制

client.py

 import zmq context = zmq.Context() socket = context.socket(zmq.PULL) socket.bind("tcp://*:5558")  while True:  response = socket.recv().decode('utf-8')  print("response: %s" % response)

登录后复制

以上就是关于Pyzmq介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2248129.html

(0)
上一篇 2025年2月26日 22:48:34
下一篇 2025年2月24日 04:03:32

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • python如何随机读取目录文件

    python随机读取目录文件的方法是使用python的模块【random argparse shutil】读取即可,其代码语句为【for x in os.listdir(path),if x.endswith(‘jpg&#821…

    2025年2月26日
    200
  • 聊聊Python装饰器

    【相关学习推荐:python教程】 装饰器 本质是一个接受参数为函数的函数。作用:为一个已经实现的方法添加额外的通用功能,比如日志记录、运行计时等。 举例 不带参数的装饰器,不用@ # 不带参数的装饰器def deco_test(func)…

    2025年2月26日
    200
  • 如何查看python版本

    查看python版本的方法:首先将python的安装路径添加到环境变量;然后按【win+R】键打开运行;接着输入【cmd】;最后在命令提示符后输入“python”并按回车键即可查看python版本。 推荐:《python教程》 方法一:通过…

    2025年2月26日 编程技术
    200
  • 监控python logcat关键字

    相关学习推荐:python教程 本文主要介绍使用Python调用ADB命令实现实时监控logcat关键字的功能 采用多进程,可同时监控多个设备,监控多个关键字。 需要配置ADB环境,具体配置就不多介绍,随便搜一下一大把,直接上代码 通过一个…

    2025年2月26日
    200
  • Python 的二元算术运算详解

    相关学习推荐:python教程 大家对我解读属性访问的博客文章反应热烈,这启发了我再写一篇关于 Python 有多少语法实际上只是语法糖的文章。在本文中,我想谈谈二元算术运算。 具体来说,我想解读减法的工作原理:a – b。我故…

    2025年2月26日
    200
  • 详解增强算术赋值“-=”操作

    相关学习推荐:python教程 序言 本文是 python语法糖 系列文章之一。最新的源代码可以在 desugar 项目中找到(github.com/brettcannon… 介绍 Python 有一种叫做增强算术赋值(augmented …

    2025年2月26日
    200
  • 详细讲解 Python实现对图像进行掩膜遮罩处理

    相关学习推荐:python教程 图像掩模(image mask):用选定的图像、图形或物体,对待处理的图像(局部或全部)进行遮挡来控制图像处理的区域或处理过程。由于覆盖的特定图像或物体称为掩模(mask),在做图像处理的时候,对图像进行遮罩…

    2025年2月26日 编程技术
    200
  • 从此驾驭图表的神器matplotlib,Python强大的作图工具

    相关学习推荐:python教程 先来给大家介绍一下另外一个很有用的数据分析库——matplotlib。 matplotlib简介 如果你在大学里参加过数学建模竞赛或者是用过MATLAB的话,相比会对这一款软件中的画图功能印象深刻。MATLA…

    2025年2月26日 编程技术
    200
  • 使用pandas进行数据处理之 DataFrame篇

    相关学习推荐:python教程 这是pandas数据处理专题的第二篇文章,我们一起来聊聊pandas当中最重要的数据结构——DataFrame。 上一篇文章当中我们介绍了Series的用法,也提到了Series相当于一个一维的数组,只是pa…

    2025年2月26日 编程技术
    200
  • pandas妙招之 在DataFrame中通过索引高效获取数据

    相关学习推荐:python教程 今天是pandas数据处理专题的第三篇文章,我们一起来聊聊DataFrame中的索引。 上一篇文章当中我们介绍了DataFrame数据结构当中一些常用的索引的使用方法,比如iloc、loc以及逻辑索引等等。今…

    2025年2月26日 编程技术
    200

发表回复

登录后才能评论