python中超过zeromq的列表或命令

2024-04-20 14:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中,通过zeromq发送列表或dict之类的对象的正确/最佳方法是什么? 如果我们使用PUB/SUB模式,其中字符串的第一部分将用作过滤器,会怎么样?

  • 我知道有多部分消息,但它们最初的意思是为了不同的目的。此外,您不能订阅所有消息,这些消息的第一个元素是特定的字符串。

Tags: 对象方法字符串目的消息元素过滤器列表
3条回答

发送前编码为JSON,接收后解码为JSON。

手动序列化

你把数据变成一个字符串,连接起来,或者做你的事情。它速度快,占用空间小,但需要工作和维护,而且不灵活。

如果另一种语言要读取数据,则需要重新编写代码。不干。

对于非常小的数据来说是可以的,但是实际的工作量通常是不值得的,除非您正在寻找速度和内存效率,并且您可以测量您的实现明显更好。

泡菜

很慢,但是可以序列化复杂的对象,甚至可以调用。它是强大的,它是如此容易,这是一个无脑的。

在另一方面,可能会出现一些你不能腌制和破坏代码的情况。另外,不能与用其他语言编写的任何库共享数据。

最后,格式是不可读的(硬调试)和相当冗长。

很好地共享对象和任务,但对消息不太好。

json

相当快,易于实现,数据结构简单到平均复杂。它具有灵活性、可读性和跨语言数据共享的特点。

对于复杂的数据,您需要编写一些代码。

除非您有非常特殊的需求,否则这可能是特性和复杂性之间的最佳平衡。特别是因为Python库中的最后一个实现是用C语言实现的,而且速度还可以。

xml

冗长,难以创建和维护,除非你有一些沉重的库,为你做所有的工作。慢点。

除非是必须的,否则我会避免的。

最后

现在和往常一样,速度和空间效率是相对的,你必须首先回答以下问题:

  • 我需要什么效率?
  • 我准备为此付出什么(金钱、时间、精力)?
  • 什么解决方案适合我当前的系统?

这才是最重要的。

哲学的美妙时刻过去了,使用JSON。

在zeroMQ中,消息是简单的二进制blob。你可以在里面放任何你想要的东西。如果对象有多个部分,则需要首先将其序列化为可在另一端反序列化的对象。最简单的方法是使用obj.repr()生成一个字符串,可以在另一端执行该字符串来重新创建对象。但这不是最好的办法。

首先,您应该尝试使用独立于语言的格式,因为迟早您将需要与用其他语言编写的应用程序进行交互。JSON对象是一个很好的选择,因为它是一个可以被多种语言解码的字符串。但是,如果您通过网络发送大量消息,JSON对象可能不是最有效的表示形式。相反,您可能需要考虑MSGPACK或Protobufs这样的格式。

如果你需要一个主题识别器为PUB_SUB,然后简单地钉在开始。使用固定长度的主题,或者在主题和实际消息之间放置分隔符。

相关问题 更多 >