2013-02-10 18 views
7

Tôi đang cố gắng để gửi một dict hiện qua zmq ổ cắm ipc, tôi có thể gửi một chuỗi với mã này, nhưng tôi không thể gửi một đối tượng dict
Gửi một dict hiện qua zmq ipc

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. 

Tôi làm như thế nào?

Trả lời

9

Chỉ có thể gửi chuỗi hoặc mảng byte qua ZeroMq, ngoài hộp. Bất cứ điều gì khác cần phải được tuần tự hóa trước khi chuyển nó sang ZeroMq để truyền trên dây.

Bạn có thể sử dụng bất kỳ thứ gì bạn muốn để tuần tự hóa, ví dụ: Bộ đệm giao thức, JSON hoặc Gói tin nhắn. Lưu ý rằng bất kỳ người nhận nào cũng cần có khả năng deserialize dữ liệu bằng cách sử dụng cùng một giao thức.

Bạn có thể tìm thấy các ví dụ về cách sử dụng các kỹ thuật tuần tự hóa khác nhau (bao gồm cả mảng numpy) kết hợp với pyzmq here. Chúng là một phần của pyzmq source.

6

Bạn cần phải nối tiếp dữ liệu, có thể là JSON tùy thuộc vào trường hợp sử dụng. bạn không thể gửi nó như nó có, bạn sẽ cần một chuỗi đại diện

import json 
myjson = json.dumps(d) 

Nhưng đối tượng datetime không thể đơn giản được chuyển đổi sang json vì vậy bạn sẽ phải đối phó với điều đó riêng biệt, bài viết này sẽ giúp với rằng: JSON datetime between Python and JavaScript

Các vấn đề liên quan