- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在非 ZMQ 套接字和 ZMQ 套接字之间编写一个适配的桥梁。
客户端代码:
import socket
if __name__ == '__main__':
HOST = "localhost"
PORT = 8888
BUFFER = 4096
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print sock
ret = sock.connect((HOST, PORT))
print ret
ret = sock.send('hello, tcpServer!')
print ret
recv = sock.recv(BUFFER)
print ('[tcpServer siad]: %s' % recv)
sock.close()
except e:
print e
代理代码,使用这个代理向ZMQ_REP服务器发送请求。
import zmq
if __name__ == '__main__':
context = zmq.Context()
socket = context.socket(zmq.STREAM)
socket.bind("tcp://*:8888")
socket_req = context.socket(zmq.REQ)
socket_req.connect("tcp://localhost:5556")
while True:
clientid, message = socket.recv_multipart();
print("id: %r" % clientid)
print("request:",message.decode('utf8'))
socket_req.send(clientid, flags=zmq.SNDMORE, copy=False)
socket_req.send("Hi", copy=False)
clientid, message = socket_req.recv_multipart()
print("id: %r" % clientid)
print("request:",message.decode('utf8'))
ZMQ_REP 服务器代码:
import zmq
import time
import sys
if __name__ == '__main__':
port = '5556'
if len(sys.argv) > 1:
port = sys.argv[1]
int(port)
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:%s" % port)
while True:
message = socket.recv()
print "Received request: ", message
time.sleep(1)
socket.send("world from %s" % port)
REQ 获取错误:
Received request: k
Traceback (most recent call last):
File "req_server.py", line 21, in <module>
socket.send("world from %s" % port)
File "zmq/backend/cython/socket.pyx", line 574, in zmq.backend.cython.socket.Socket.send (zmq/backend/cython/socket.c:5434)
File "zmq/backend/cython/socket.pyx", line 621, in zmq.backend.cython.socket.Socket.send (zmq/backend/cython/socket.c:5196)
File "zmq/backend/cython/socket.pyx", line 181, in zmq.backend.cython.socket._send_copy (zmq/backend/cython/socket.c:2035)
File "zmq/backend/cython/checkrc.pxd", line 21, in zmq.backend.cython.checkrc._check_rc (zmq/backend/cython/socket.c:6248)
zmq.error.ZMQError: Operation cannot be accomplished in current state
最佳答案
第一点:一般不推荐在zmq中使用REQ/REP。使用更通用的 DEALER/ROUTER 组合。唯一的区别:
这是使用 DEALER 的代理版本:
import zmq
if __name__ == '__main__':
context = zmq.Context()
socket = context.socket(zmq.STREAM)
socket.bind("tcp://*:8888")
socket_req = context.socket(zmq.DEALER)
socket_req.connect("tcp://localhost:5556")
while True:
clientid, message = socket.recv_multipart()
print("id: %r" % clientid)
print("request: %s" % message.decode('utf8'))
socket_req.send(message)
reply = socket_req.recv()
print("reply: %s" % reply.decode('utf8'))
socket.send_multipart([clientid, reply])
还有你的服务器,使用路由器:
import zmq
import time
import sys
if __name__ == '__main__':
port = 5556
if len(sys.argv) > 1:
port = int(sys.argv[1])
context = zmq.Context()
socket = context.socket(zmq.ROUTER)
socket.bind("tcp://127.0.0.1:%i" % port)
while True:
message = socket.recv_multipart()
req_id = message[0]
print("Received request: %s" % message[1:])
time.sleep(1)
socket.send_multipart([req_id, "world from %s" % port])
关于python - 我如何在非 zmq 套接字和 pyzmq 之间进行调整?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29229063/
我最近开始使用 ZeroMQ 并观察到 有时,ZeroMQ 上下文的初始化可能需要多达 40 秒 .通常它比这快得多。 例如: import zmq # the next line will so
我有一些代码正在监视其他一些正在更改的文件,我想做的是启动使用带有不同套接字的 Zeromq 的代码,我现在这样做的方式似乎会导致 libzmq 中的某个地方断言失败,因为我可能会重复使用同一个套接字
我正在使用 PyZMQ 创建请求/回复服务器,并且我试图弄清楚为每个新客户端连接创建线程的行为是否由 PyZMQ 自动处理。最终,我试图弄清楚来自一个客户端的需要很长时间才能回复的请求是否会阻止来自所
我有以下发布者代码,它实例化一些类实例并发布一些消息。 但是,我在订阅者端没有收到任何内容。 发布商 import zmq import time from multiprocessing impor
我一直在想办法在我的套接字尚未连接到绑定(bind)地址时如何关闭 Context 实例(或者如果我需要的话)。这是我的演示代码: import zmq import json data = {} d
有人能给我指出一个带有 Python 绑定(bind)的 REQ/REP 非阻塞 ZeroMQ (0MQ) 的例子吗?可能是我对 ZMQ 的理解有问题,但是我在网上找不到例子。 我在 Node.JS
大家好 StackOverflow 的好人。 我正在使用 pyzmq,我有一些长时间运行的进程,这导致我发现套接字句柄处于打开状态。我已将有问题的代码缩小为以下内容: import zmq uri =
我有以下代码使用请求和回复模式从服务器发送数组到客户端, def send_array( socket, A, flags = 0, copy = True, track = False ): ""
我已经连接了 zeromq,“msg_in”已经排队。如果在该时间段内没有新消息队列来设置超时。如何设置超时。以下是核心代码 requestDict = {"id":111, "name":"test
我目前正在研究一些用 C 编写的模拟代码,这些代码在不同的远程机器上运行。当 C 部分完成后,我想通过使用 python 模拟 api 和某种作业队列系统扩展它来简化我的工作,它应该执行以下操作: 1
我对 PyZMQ 中的 HWM 行为感到困惑。我希望以下代码会被阻止 失败示例 In [1]: import zmq In [2]: context = zmq.Context() In [3]: a
我有一个ROUTER,其目的是积累来自多个DEALER客户端的图像数据并对完整图像执行OCR。我发现处理 OCR 最有效的方法是使用 Python 的多处理库;累积的图像字节被放入到队列中,以便在单独
我正在尝试使用 pyzmq 的内置日志处理程序(参见 here)为我的分布式应用程序实现集中式日志记录服务器。虽然从架构的角度我可以理解 PUB/SUB 模式的使用,但我无法掌握这种系统的正确技术实现
我正在尝试与通过 ZeroMQ 套接字开始使用 multiprocessing.Process 的子进程进行通信。我知道存在与 multiprocessing 模块内的子进程通信的解决方案,但我希望最
我想限制我的 ZeroMQ 消息队列在 Python 应用程序中消耗的内存量。我知道设置高水位线会限制在发送方排队的数量,但是有没有办法控制在接收方排队的数量? Python ZeroMQ 绑定(bi
在 python 中寻找有效的 IPC 解决方案时,我偶然发现了 zeromq;我有几个 python 进程需要在主进程中对来自 dict 的数据进行一些 cpu 密集型处理。这些工作进程只能从字典中
这是我的第一篇 StackOverflow 帖子! 我在创建具有 pyzmq (v22.0.2) 依赖项的 pyinstaller(v4.2) 可执行文件时遇到问题。我通过运行“pyinstaller
根据 ZeroMQ 文档,一旦排队的消息数量达到高水位线,pub 套接字就会删除消息。 这在以下示例中似乎不起作用(是的,我确实在绑定(bind)/连接之前设置了 hwm): import time
我第一次使用 python 中的 asyncio 并尝试将其与 ZMQ 结合起来。 基本上我的问题是我有一个 REP/REQ 系统,位于 async def 中具有我需要等待的功能。值如何不更新。下面
ZMQ socket documentation 中的 ZMQ_PUSH 部分假设在没有下游节点的 PUSH 套接字上调用 send() 应该阻塞,直到至少有一个节点可用。 但是,运行以下代码似乎不会
我是一名优秀的程序员,十分优秀!