问题标签 [pyzmq]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2235 浏览

python - 从另一个线程关闭挂起的 zmq 套接字

是否有某种方法可以从 Python 中的另一个线程关闭特定的挂起的 recv zmq 套接字,而不会破坏可能正在使用的其他套接字?以下代码似乎没有退出;替换sock.close()withctx.destroy()会导致它退出,但这显然会破坏上下文中的所有套接字:

0 投票
1 回答
1882 浏览

python - 结合 tornado 和 zmq ioloops:对等异常重置连接

当我尝试按照pyzmq 官方文档中的描述组合 Tornado 和 pyzmq ioloops 时,我遇到了一个烦人的(虽然不是关键的)问题。

我有一个运行龙卷风(T)服务器的进程,它接受来自客户端(C)的 REST API 请求,并通过 ZMQ 传输到另一个真正工作的进程(Z)代理它们。

如果 C 在 Z 回复 T之前关闭连接,则 Z(龙卷风)会输出一长串异常跟踪(见底部)。想象以下示例:

这个例子实际上并没有与任何 ZMQ 对等体对话,它只是将 pyzmq ioloop 附加到 tornado 的 ioloop。不过,足以说明问题。

从控制台一台运行服务器:

从控制台二运行客户端并在服务器回复之前中断它(即在 5 秒内):

服务器的输出是:

注意:这似乎是与 pyzmq 相关的问题,因为在排除 pyzmq ioloop 后消失了。

服务器不会死,它可以被其他客户端使用,所以问题并不严重。但是,在日志文件中找到这些巨大的令人困惑的痕迹是非常烦人的。

那么,有没有什么众所周知的方法可以解决这个问题呢?谢谢。

0 投票
2 回答
8124 浏览

zeromq - ZMQ REP,知道谁发送请求

我目前正在将 zmq 与 python 一起使用。服务器正在使用 REP 套接字。

我有办法在接收消息时知道是谁发送的吗?如果收到 2 条消息,我只需要知道它们是否来自同一个用户,因此例如 uid 就足够了。

0 投票
2 回答
3730 浏览

python - pyzmq 非阻塞套接字

有人可以指出一个带有 Python 绑定的 REQ/REP 非阻塞 ZeroMQ (0MQ) 示例吗?也许我对ZMQ的理解是错误的,但我在网上找不到一个例子。

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

0 投票
1 回答
268 浏览

python - ZeroMQ rrclient-broker 不工作

我正在尝试运行来自https://github.com/imatix/zguide的 Python 和 Node.JS 示例,用于 client-broker-worker 架构(rrclient、rrworker、rrbroker)。

我可以确认 Python 实现工作正常,Node.JS 实现工作正常,但是当我尝试将 Node.JS rrclient 与 Python rrbroker 结合使用时,整个事情崩溃了,我收到以下错误:

Python 在使用 libzmq.3.dylib 插件时意外退出。

并且代理出现以下错误:断言失败:(prefetched_msg.flags () & msg_t::identity) == 0 (router.cpp:276) Abort trap: 6

似乎 Node.JS 在连接到 Python 时遇到问题。这似乎也提出了基本的 REQ/REP 架构,而不仅仅是客户端代理工作者。

0 投票
1 回答
24954 浏览

zeromq - ZeroMQ/ZMQ 推/拉模式的用处

在试验ZeroMQ Push/Pull(他们所说的Pipeline)套接字类型时,我很难理解这种模式的实用性。它被称为“负载平衡器”。

给定单个服务器向多个工作人员发送任务,Push/Pull 将在所有客户端之间平均分配任务。3 个客户端和 30 个任务,每个客户端获得 10 个任务:client1 获得任务 1、4、7、... client2、2、5、...等等。很公平。字面上地。

然而,在实践中,任务复杂性或客户端计算资源(或可用性)通常是非均匀混合的,那么这种模式就会被严重破坏。所有任务似乎都是提前安排好的,服务器不知道客户端的进度,甚至不知道它们是否可用。如果 client1 宕机,它的剩余任务不会发送给其他客户端,而是为 client1 排队。如果 client1 仍然关闭,则永远不会处理这些任务。相反,如果客户端处理其任务的速度更快,则它不会获得更多任务并保持空闲状态,因为它们仍然为其他客户端安排。

使用REQ/REP是一种可能的解决方案;然后只将任务分配给可用资源。

所以我错过了什么吗?如何Push/Pull有效使用?有没有办法使用这种套接字类型来处理客户端、任务等的不对称性?

谢谢!

这是一个简单的 Python 示例:

.

在命令行上启动 3 个带有延迟参数的客户端(即 1、1 和 0.1),然后启动服务器,看看所有任务是如何均匀分布的。然后杀死其中一个客户端以查看其剩余任务未得到处理。

取消注释指示将其切换到Req/Rep类型套接字的行并观察更有效的负载平衡器。

0 投票
1 回答
1873 浏览

node.js - 从 zmq 套接字返回值

我正在使用 Socket.IO 让客户端网页从我的 Node.JS 服务器动态获取数据。在服务器端,我使用 zeromq 套接字库(REQ/REP 结构,参见 zguide 的 rrclient.js 示例)将请求转发到 Python 后端。

但是,由于我的服务器充当 socket.io 服务器,我必须按如下方式包装我的响应,以便将其发送回特定的客户端:

因此 fetch_data 函数使用 zmq 套接字 (socket.send) 将请求推送到服务器。

但是 Node ZMQ 套接字使用 socket.on('message',function(){}); 响应请求。侦听器,实际上并没有返回任何东西。

如何使用 socket.on('message',function(){}); 向发起 socket.send() 请求的特定函数返回一个值?

换句话说,如何让客户端的 socket.io 请求让 Node.JS 使用 ZMQ 从 python 后端获取相关数据,然后将其返回给 socket.io 客户端?(当然是以非阻塞方式)

0 投票
1 回答
2790 浏览

python - 多线程和 ZMQ DEALER/REP hello world 不起作用

首先是我的代码(很大程度上来自 ZMQ 文档http://zguide.zeromq.org/py:mtserver):

我已经用 inproc 和 tcp 套接字尝试了这段代码。

  • 当工作人员尝试连接时,inproc 会出错
  • TCP 只是在经销商发送后等待,工人没有打印,经销商没有收到其他消息
  • 我已经想到了慢连接器问题并添加了一个睡眠(一个在工人连接之前,一个在经销商的 send() 之前):这只会导致 inproc 的行为与 TCP 相同。

PS:我很抱歉camelCase,但我对它上瘾了。

0 投票
1 回答
4168 浏览

zeromq - 如何设置 pyzmq 套接字排队超时

我已经连接了 zeromq,“msg_in”已经排队。如果在该时间段内没有新消息队列到来,则设置超时。如何设置超时。以下是核心代码

0 投票
1 回答
603 浏览

python - 安装 ZeroMQ 时出错

我正在克服错误。我已按照 ZeroMQ 官方网站上给出的步骤进行操作。