python - 记录 zmq 套接字实例发送/接收?

标签 python debugging zeromq

我正在调试一些 zeromq 代码,我想记录套接字实例发送/接收。换句话说,我有

context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://127.0.0.1:5000")

我想以某种方式在代码的其他地方记录套接字实例的发送/接收。

这里有什么想法吗?我不确定从哪里开始。

最佳答案

这是一个记录每条消息的 Socket 对象的示例:


import logging
import time
import zmq

class LogSocket(object):
    socket = None
    log = None
    name = None

    def __init__(self, socket, log=None, name=None):
        """wrap a socket so send/recv_multipart log their messages"""
        self.socket = socket
        if log is None:
            logging.basicConfig(level=logging.INFO)
            log = logging.getLogger().info
        self.log = log

        if name is None:
            name = s.identity or repr(s)
        self.name = name

    def send_multipart(self, msg, *args, **kwargs):
        self.log("%s sending: %r" % (self.name, msg))
        return self.socket.send_multipart(msg, *args, **kwargs)

    def recv_multipart(self, *args, **kwargs):
        msg = self.socket.recv_multipart(*args, **kwargs)
        self.log("%s received: %r" % (self.name, msg))
        return msg

    def __getattr__(self, key):
        return getattr(self.socket, key)


ctx = zmq.Context.instance()

s = ctx.socket(zmq.REQ)
s.connect("tcp://127.0.0.1:5556")

# wrap the zmq socket in the Logging object:
# this object has exactly the same interface as 
s = LogSocket(s, name="REQ")

for i in range(5):
    time.sleep(1)
    s.send_multipart(['hello', 'world'])
    reply = s.recv_multipart()
    # in this case, only _multipart methods are logged, so straight send/recv are not:
    s.send("quiet")
    s.recv()

用于处理序列化/日志记录/身份验证等的辅助对象的一个​​示例是 Session object。在 IPython 中,这比这个简单的案例复杂得多,但允许您在代码中集中所有消息传递抽象。

关于python - 记录 zmq 套接字实例发送/接收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10439924/

相关文章:

python - 从 Queryset Django 中填充缺失的数据

python - 在Python中将多张Excel文件按一列拆分

python - 如何将日期时间列添加到 np.array

windows - 检查正在运行的进程正在调用哪个windows api

python - JSON 到 CSV - 仅写入一次未知标题行

ios - 尝试在iOS中关闭弹出窗口时引发异常

javascript - 使用 Rhino 在 Eclipse 中调试 Javascript

java - ZeroMQ 两个 PUB-SUB 代理

用于并行化非线程安全 C++ 库的 Haskell 框架

zeromq - NetMQ 与 ZMTP 1.0 兼容吗?