通过zmq ipc发送现有的dict

时间:2013-02-10 12:37:00

标签: python zeromq

我正在尝试通过zmq ipc socket发送一个现有的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.

我该怎么做?

2 个答案:

答案 0 :(得分:9)

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

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

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

答案 1 :(得分:7)

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

import json
myjson = json.dumps(d)

但是datetime对象不能简单地转换为json,所以你必须单独处理它,这篇文章将有助于:JSON datetime between Python and JavaScript