首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyzmq非阻塞套接字

pyzmq非阻塞套接字
EN

Stack Overflow用户
提问于 2012-09-18 09:16:27
回答 2查看 3.6K关注 0票数 6

有人能给我举一个使用Python绑定的REQ/REP非阻塞ZeroMQ (0MQ)的例子吗?也许我对ZMQ的理解是错误的,但我在网上找不到一个例子。

我在Node.JS中有一个服务器,它将工作从多个客户端发送到服务器。其想法是,服务器可以启动一系列并行操作的作业,而不是先处理一个客户端的数据,然后再处理下一个客户端的数据

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-18 11:03:52

你可以使用zmq.Poller (在zguide repo中可以找到很多例子,比如rrbroker.py)或者gevent-zeromq implementation (code sample)来实现这个目标。

票数 2
EN

Stack Overflow用户

发布于 2019-03-11 05:03:02

接受答案中提供的示例提供了它的要点,但是您也可以通过对代理使用zmq.device,同时坚持使用来自the guide的“扩展请求-回复”模式来获得一些更简单的东西。因此,服务器的hello worldy示例可能如下所示:

代码语言:javascript
复制
import time
import threading
import zmq

context = zmq.Context()

def worker():
    socket = context.socket(zmq.REP)
    socket.connect('inproc://workers')
    while True:
        msg = socket.recv_string()
        print(f'Received request: [{msg}]')
        time.sleep(1)
        socket.send_string(msg)

url_client = 'tcp://*:5556'
clients = context.socket(zmq.ROUTER)
clients.bind(url_client)
workers = context.socket(zmq.DEALER)
workers.bind('inproc://workers')

for _ in range(4):
    thread = threading.Thread(target=worker)
    thread.start()

zmq.device(zmq.QUEUE, clients, workers)

在这里,我们让四个工作者并行处理传入的请求。现在,您在客户端使用Node,但为了保持示例的完整性,您可以使用下面的Python客户端来查看它的工作情况。在这里,我们创建了10个请求,然后将分3批处理:

代码语言:javascript
复制
import zmq
import threading

context = zmq.Context()

def make_request(a):
    socket = context.socket(zmq.REQ)
    socket.connect('tcp://localhost:5556')
    print(f'Sending request {a} ...')
    socket.send_string(str(a))
    message = socket.recv_string()
    print(f'Received reply from request {a} [{message}]')

for a in range(10):
    thread = threading.Thread(target=make_request, args=(a,))
    thread.start()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12469137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档