【问题标题】:Sending an existing dict through zmq ipc通过 zmq ipc 发送现有的 dict
【发布时间】:2013-02-25 20:59:37
【问题描述】:

我正在尝试通过 zmq ipc 套接字发送现有的 dict,我可以使用此代码发送一个字符串,但我无法发送 dict 对象

import zmq, datetime

d = {0: ('356612022462768', 'EVENT', 0, '2012-12-26 15:50:16', -20.22216, -70.13723, 6.44, 134.0, 1, 2, '18743230', datetime.datetime(2013, 2, 10, 9, 6, 2, 362734))}

if __name__ == "__main__":
    context = zmq.Context()
    publisher = context.socket(zmq.PUB)
    publisher.connect("ipc://shared")
    while True:
        publisher.send( d )
        time.sleep( 1 )

TypeError: {0: ('356612022462768', 'EVENT', 0, '2012-12-26 15:50:16', 
           -20.22216, -70.13723, 6.44, 134.0, 1, 2, '18743230', 
           datetime.datetime(2013, 2, 10, 9, 6, 2, 362734))} 
does not provide a buffer interface.

我该怎么做?

【问题讨论】:

    标签: python zeromq


    【解决方案1】:

    只能通过开箱即用的 ZeroMq 发送字符串或字节数组。在将其他任何内容传递给 ZeroMq 以进行在线传输之前,都需要对其进行序列化。

    您可以使用任何您喜欢的方式对其进行序列化,例如 Protocol Buffers、JSON 或 Message Pack。请注意,任何接收者都需要能够使用相同的协议对数据进行反序列化。

    您可以找到有关如何将各种序列化技术(包括 numpy 数组)与 pyzmq here 结合使用的示例。它们是pyzmq source 的一部分。

    【讨论】:

      【解决方案2】:

      您需要将数据序列化,可能会根据用例将数据序列化为 JSON。你不能按原样发送,你需要一个字符串表示

      import json
      myjson = json.dumps(d)
      

      但 datetime 对象不能简单地转换为 json,因此您必须单独处理,这篇文章将对此有所帮助:JSON datetime between Python and JavaScript

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        相关资源
        最近更新 更多