I'm trying to send an existing dict through zmq ipc socket, I can send a string with this code, but I can't send a dict object
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.
How can I do that?
It is only possible to either send strings or byte arrays through ZeroMq, out-of-the-box. Anything else needs to be serialized before passing it to ZeroMq for transfer on the wire.
You can use whatever you like to serialize it, for example Protocol Buffers, JSON or Message Pack. Note that any recipients needs to be able to deserialize the data using the same protocol.
You can find examples on how to use various serialization techniques (including a numpy array) in conjunction with pyzmq here. They are part of the pyzmq source.