ZeroMQ-Multiprocess

# request_reply_processes.py
import zmq
import time
import sys
from  multiprocessing import Process

def server(port="5556"):
    context = zmq.Context()
    socket = context.socket(zmq.REP)
    socket.bind("tcp://*:%s" % port)
    print "Running server on port: ", port
    # serves only 5 request and dies
    for reqnum in range(5):
        # Wait for next request from client
        message = socket.recv()
        print "Received request #%s: %s" % (reqnum, message)
        socket.send("World from %s" % port)
         
def client(ports=["5556"]):

    context = zmq.Context()
    print "Connecting to server with ports %s" % ports
    socket = context.socket(zmq.REQ)
    for port in ports:
        socket.connect ("tcp://localhost:%s" % port)
    for request in range (20):
        print "Sending request ", request,"..."
        socket.send ("Hello")
        message = socket.recv()
        print "Received reply ", request, "[", message, "]"
        time.sleep (1)

if __name__ == "__main__":
    # Now we can run a few servers 
    server_ports = range(5550,5558,2)
    for server_port in server_ports:
        Process(target=server, args=(server_port,)).start()
        
    # Now we can connect a client to all these servers
    Process(target=client, args=(server_ports,)).start()
# running it:
(D:\anaconda) C:\Users\admin\Desktop\opt>python request_reply_processes.py

# result:
(D:\anaconda) C:\Users\admin\Desktop\opt>python request_reply_processes.py
Running server on port:  5550
Running server on port:  5552
Running server on port:  5554
Connecting to server with ports [5550, 5552, 5554, 5556]
Running server on port:  5556
Sending request  0 ...
Received request #0: Hello
Received reply  0 [ World from 5550 ]
Sending request  1 ...
Received request #0: Hello
Received reply  1 [ World from 5552 ]
Sending request  2 ...
Received request #0: Hello
Received reply  2 [ World from 5554 ]
Sending request  3 ...
Received request #0: Hello
Received reply  3 [ World from 5556 ]
Sending request  4 ...
Received request #1: Hello
Received reply  4 [ World from 5550 ]
Sending request  5 ...
Received request #1: Hello
Received reply  5 [ World from 5552 ]
Sending request  6 ...
Received request #1: Hello
Received reply  6 [ World from 5554 ]
Sending request  7 ...
Received request #1: Hello
Received reply  7 [ World from 5556 ]
Sending request  8 ...
Received request #2: Hello
Received reply  8 [ World from 5550 ]
Sending request  9 ...
Received request #2: Hello
Received reply  9 [ World from 5552 ]
Sending request  10 ...
Received request #2: Hello
Received reply  10 [ World from 5554 ]
Sending request  11 ...
Received request #2: Hello
Received reply  11 [ World from 5556 ]
Sending request  12 ...
Received request #3: Hello
Received reply  12 [ World from 5550 ]
Sending request  13 ...
Received request #3: Hello
Received reply  13 [ World from 5552 ]
Sending request  14 ...
Received request #3: Hello
Received reply  14 [ World from 5554 ]
Sending request  15 ...
Received request #3: Hello
Received reply  15 [ World from 5556 ]
Sending request  16 ...
Received request #4: Hello
Received reply  16 [ World from 5550 ]
Sending request  17 ...
Received request #4: Hello
Received reply  17 [ World from 5552 ]
Sending request  18 ...
Received request #4: Hello
Received reply  18 [ World from 5554 ]
Sending request  19 ...
Received request #4: Hello
Received reply  19 [ World from 5556 ]

(D:\anaconda) C:\Users\admin\Desktop\opt>
时间: 2024-10-21 19:57:57

ZeroMQ-Multiprocess的相关文章

rabbitMQ、activeMQ、zeroMQ、Kafka、Redis 比较

Kafka作为时下最流行的开源消息系统,被广泛地应用在数据缓冲.异步通信.汇集日志.系统解耦等方面.相比较于RocketMQ等其他常见消息系统,Kafka在保障了大部分功能特性的同时,还提供了超一流的读写性能. 针对Kafka性能方面进行简单分析,相关数据请参考:https://segmentfault.com/a/1190000003985468,下面介绍一下Kafka的架构和涉及到的名词: Topic:用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Parti

ZeroMQ接口函数之 :zmq_msg_set - 设置消息的性质

ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_set zmq_msg_set(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq_msg_set - 设置消息的性质 Synopsis int zmq_msg_set (zmq_msg_t *message, int property, int value); Description zmq_msg_set()函数会设置message参数指定的消息的属性,属性值由value参数指定

ZeroMQ接口函数之 :zmq_curve_keypair - 生成一个新的CURVE 密钥对

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_curve_keypair zmq_curve_keypair(3) ØMQ Manual - ØMQ/4.1.0 Name zmq_curve_keypair - 生成一个新的CURVE 密钥对 Synopsis int zmq_curve_keypair (char *z85_public_key, char *z85_secret_key); Description 函数zmq_curve_keypair

消息队列库——ZeroMQ

消息队列库--ZeroMQ ZeroMQ(简称ZMQ)是一个基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字. ZMQ是网络通信中新的一层,介于应用层和传输层之间(按照TCP/IP划分),其是一个可伸缩层,可并行运行,分散在分布式系统间. ZMQ不是单独的服务,而是一个嵌入式库,它封装了网络通信.消息队列.线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信. 主线程与I/O线程: I

SaltStack(五) SaltStack与ZeroMQ

一.ZeroMQ描述 我们进行自动化运维大多数情况下,是我们的服务器数量已经远远超过人工SSH维护的范围,SaltStack可以支数以千计,甚至更多的服务器,这些性能的提供主要来自于ZeroMQ,因为SaltStack地城是基于ZeroMQ进行高效的网络通信,ZMQ用于node与node间的通信,node可以是主机也可以可以是进程. 二.ZeroMQ简介 ZeroMQ(我们通常还会OMQ,Zmq等来表示)是一个简单好用的传输层,像框架一样的一个套接字库,他使用的socket编程更加简单.简洁和性

死亡的协议--- Pieter Hintjens (ZeroMQ作者)

过去几年中用zeromq写过几个系统系统.对ZeroMQ强大和灵活印象非常深刻.在阅读zeromq guide文档时候.发现作者整理各种通信模式非常经典和实用,可以作为分布式通信的教科书来看.第一次见到这么有价值的开源框架说明文档 .  Pieter Hintjens   2010诊断出胆管癌,并成功手术切除.最近 (2016年4月)发现癌症大面积扩散到肺部,已经无法治疗. 他写的最后一篇通信模式是关于死亡协议. 原文地址是 A Protocol for Dying http://hintjen

zeromq源码分析笔记之线程间收发命令(2)

在zeromq源码分析笔记之架构说到了zmq的整体架构,可以看到线程间通信包括两类,一类是用于收发命令,告知对象该调用什么方法去做什么事情,命令的结构由command_t结构体确定:另一类是socket_base_t实例与session的消息通信,消息的结构由msg_t确定.命令的发送与存储是通过mailbox_t实现的,消息的发送和存储是通过pipe_t实现的,这两个结构都会详细说到,今天先说一下线程间的收发命令. zeromq的线程可分为两类,一类是io线程,像reaper_t.io_thr

zeromq源码分析笔记之准备篇

zeromq这个库主要用于进程通信,包括本地进程.网络通信,涉及到一些基础知识,主要包括管道通信,socket编程的内容,反应器模式(使用IO多路复用实现),无锁队列这几块比较重要的部分,下面的几个链接是这几块内容的学习笔记,有了这些知识,能比较好的理解这个开源库 1.socket原理详解 2.I/O多路复用之select 3.I/O多路复用之poll 4.I/O多路复用之epoll

消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ

RabbitMQ.ActiveMQ和ZeroMQ都是极好的消息中间件,但是我们在项目中该选择哪个更适合呢?很多开发者面临这个烦恼.下面我会对这三个消息中间件做一个比较,看了后你们就心中有数了. RabbitMQ是AMQP协议领先的一个实现,它实现了代理(Broker)架构,意味着消息在发送到客户端之前可以在中央节点上排队.此特性使得RabbitMQ易于使用和部署,适宜于很多场景如路由.负载均衡或消息持久化等,用消息队列只需几行代码即可搞定.但是,这使得它的可扩展性差,速度较慢,因为中央节点增加了

ZeroMQ初步学习

今天先来编译一下ZeroMQ的示例程序. 首先要先安装zeromq,使用默认的选项./configure, make, make install. 然后是zeromq的server的示例代码 #include <zmq.hpp> #include <string> #include <iostream> #include <unistd.h> int main () { // Prepare our context and socket zmq::conte