【问题标题】:log zmq socket instance send/recv?记录 zmq 套接字实例发送/接收?
【发布时间】:2013-02-25 21:05:14
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你的应用是什么样的?我通常将发送/接收/序列化逻辑包装在一个单独的对象中,这样我就有了类似session_object.send(socket, message) 的代码。这让我可以将序列化/身份验证/日志记录放在一个地方,并将其与 Socket 对象本身分开。

标签: python debugging zeromq


【解决方案1】:

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

导入日志 进口时间 导入zmq 类 LogSocket(对象): 插座 = 无 日志 = 无 名称 = 无 def __init__(self, socket, log=None, name=None): """包装一个套接字,以便发送/recv_multipart 记录他们的消息""" self.socket = 套接字 如果日志为无: logging.basicConfig(level=logging.INFO) 日志 = logging.getLogger().info self.log = 日志 如果名称为无: name = s.identity 或 repr(s) self.name = 名称 def send_multipart(self, msg, *args, **kwargs): self.log("%s 发送: %r" % (self.name, msg)) 返回 self.socket.send_multipart(msg, *args, **kwargs) def recv_multipart(self, *args, **kwargs): msg = self.socket.recv_multipart(*args, **kwargs) self.log("%s 收到: %r" % (self.name, msg)) 返回消息 def __getattr__(self, key): 返回 getattr(self.socket, key) ctx = zmq.Context.instance() s = ctx.socket(zmq.REQ) s.connect("tcp://127.0.0.1:5556") # 在 Logging 对象中包装 zmq 套接字: # 这个对象的接口与 s = LogSocket(s, name="REQ") 对于范围内的 i (5): 时间.sleep(1) s.send_multipart(['hello', 'world']) 回复 = s.recv_multipart() # 在这种情况下,只记录 _multipart 方法,因此不直接发送/接收: s.send("安静") s.recv()

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

【讨论】:

    猜你喜欢
    • 2023-03-23
    • 2012-04-15
    • 1970-01-01
    • 2010-11-14
    • 2014-12-16
    • 1970-01-01
    • 2016-02-21
    • 2013-04-01
    • 2016-09-12
    相关资源
    最近更新 更多