2013-02-10 1 views
7

, 나는이 코드 문자열을 보낼 수 있습니다,하지만 난 DICT 개체
내가 zmq IPC 소켓을 통해 기존의 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. 

어떻게하면됩니까?

답변

9

문자열이나 바이트 배열을 바로 사용할 수있는 것은 ZeroMq를 통해서만 가능합니다. 그 밖의 모든 것은 ZeroMq에 전달하기 전에 직렬화되어 전송되어야합니다.

프로토콜 버퍼, JSON 또는 메시지 팩과 같이 원하는대로 사용할 수 있습니다. 모든 수신자는 동일한 프로토콜을 사용하여 데이터를 역 직렬화 할 수 있어야합니다.

pyzmq here과 함께 다양한 직렬화 기술 (numpy 배열 포함)을 사용하는 방법에 대한 예제를 찾을 수 있습니다. 그들은 pyzmq source의 일부입니다.

6

유스 케이스에 따라 아마 JSON으로 데이터를 직렬화해야 할 것입니다. 그것이 당신이 따로 처리해야합니다, 그래서 당신은 단순히 JSON으로 변환 할 수 없습니다 당신이 문자열 표현

import json 
myjson = json.dumps(d) 

그러나 날짜 개체가 필요합니다, 그것을 보낼 수 없습니다,이 게시물이 도움이됩니다 그 : JSON datetime between Python and JavaScript

관련 문제