Hướng dẫn zmq send python object - zmq gửi đối tượng python
Dễ dàng, người ta có thể sử dụng tốt nhất tốt nhất ____ ____ ____ 6 phương pháp để thực hiện đúng điều này. Phía gửi, Một bên nhận, mỗi bên tiềm năng ____ 9-S sẽ tái sử dụng ____ 10 phương pháp. import zlib, cPickle as pickle def send_zipped_pickle(socket, obj, flags=0, protocol=-1): """pickle an object, and zip the pickle before sending it""" p = pickle.dumps(obj, protocol) z = zlib.compress(p) return socket.send(z, flags=flags) def recv_zipped_pickle(socket, flags=0, protocol=-1): """inverse of send_zipped_pickle""" z = socket.recv(flags) p = zlib.decompress(z) return pickle.loads(p)0-method. Tuy nhiên, tất cả các ____ 9-S cũng phải thực hiện thêm một bước, để chủ động đăng ký để nhận bất kỳ tin nhắn nào. Để biết chi tiết về import zlib, cPickle as pickle def send_zipped_pickle(socket, obj, flags=0, protocol=-1): """pickle an object, and zip the pickle before sending it""" p = pickle.dumps(obj, protocol) z = zlib.compress(p) return socket.send(z, flags=flags) def recv_zipped_pickle(socket, flags=0, protocol=-1): """inverse of send_zipped_pickle""" z = socket.recv(flags) p = zlib.decompress(z) return pickle.loads(p)2, hãy xem API được ghi lại Zeromq hoặc không ngần ngại nhâm nhi từ nhiều ví dụ ở đây. Một số thủ thuật bổ sung (không cần thiết cho tầm thường ____ 13-s) có thể giúp với giai đoạn ____ 14 của giai đoạn Ser/Des. Tuy nhiên, những điều này vượt xa phạm vi của câu hỏi này và có thể đưa ra những lợi thế trong môi trường được kiểm soát nhưng các vấn đề trong môi trường mở, không kiểm soát Sự mạnh mẽ cao hơn của việc xử lý các đối tượng ____ 16-ser/des và nhiều tiến bộ hơn, như lưu trữ ảnh chụp nhanh toàn cảnh. Tín dụng truy cập @Mikemckearns Vui lòng đọc lại tài liệu có mặt cho tất cả các chi tiết liên quan đến cú pháp trong chuỗi import zlib, cPickle as pickle def send_zipped_pickle(socket, obj, flags=0, protocol=-1): """pickle an object, and zip the pickle before sending it""" p = pickle.dumps(obj, protocol) z = zlib.compress(p) return socket.send(z, flags=flags) def recv_zipped_pickle(socket, flags=0, protocol=-1): """inverse of send_zipped_pickle""" z = socket.recv(flags) p = zlib.decompress(z) return pickle.loads(p)7: Khi gửi tin nhắn qua mạng, bạn thường cần sắp xếp dữ liệu của mình vào byte. Xây dựng tuần tự hóa tích hợpPYZMQ chủ yếu là các ràng buộc cho libzmq, nhưng chúng tôi cung cấp ba phương pháp tuần tự hóa xây dựng để thuận tiện, để giúp các nhà phát triển Python tìm hiểu libzmq. Python có hai gói chính để tuần tự hóa các đối tượng: import zlib, cPickle as pickle def send_zipped_pickle(socket, obj, flags=0, protocol=-1): """pickle an object, and zip the pickle before sending it""" p = pickle.dumps(obj, protocol) z = zlib.compress(p) return socket.send(z, flags=flags) def recv_zipped_pickle(socket, flags=0, protocol=-1): """inverse of send_zipped_pickle""" z = socket.recv(flags) p = zlib.decompress(z) return pickle.loads(p)8 và import zlib, cPickle as pickle def send_zipped_pickle(socket, obj, flags=0, protocol=-1): """pickle an object, and zip the pickle before sending it""" p = pickle.dumps(obj, protocol) z = zlib.compress(p) return socket.send(z, flags=flags) def recv_zipped_pickle(socket, flags=0, protocol=-1): """inverse of send_zipped_pickle""" z = socket.recv(flags) p = zlib.decompress(z) return pickle.loads(p)9, vì vậy chúng tôi cung cấp các phương thức tiện lợi đơn giản để gửi và nhận các đối tượng được tuần tự hóa với các mô -đun này. Một ổ cắm có các phương thức import numpy def send_array(socket, A, flags=0, copy=True, track=False): """send a numpy array with metadata""" md = dict( dtype = str(A.dtype), shape = A.shape, ) socket.send_json(md, flags|zmq.SNDMORE) return socket.send(A, flags, copy=copy, track=track) def recv_array(socket, flags=0, copy=True, track=False): """recv a numpy array""" md = socket.recv_json(flags=flags) msg = socket.recv(flags=flags, copy=copy, track=track) buf = buffer(msg) A = numpy.frombuffer(buf, dtype=md['dtype']) return A.reshape(md['shape'])0 và import numpy def send_array(socket, A, flags=0, copy=True, track=False): """send a numpy array with metadata""" md = dict( dtype = str(A.dtype), shape = A.shape, ) socket.send_json(md, flags|zmq.SNDMORE) return socket.send(A, flags, copy=copy, track=track) def recv_array(socket, flags=0, copy=True, track=False): """recv a numpy array""" md = socket.recv_json(flags=flags) msg = socket.recv(flags=flags, copy=copy, track=track) buf = buffer(msg) A = numpy.frombuffer(buf, dtype=md['dtype']) return A.reshape(md['shape'])1, tương ứng với việc gửi một đối tượng qua dây sau khi tuần tự hóa với JSON và Pickle tương ứng, và bất kỳ đối tượng nào được gửi qua các phương thức đó đều có thể được xây dựng lại bằng các phương thức import numpy def send_array(socket, A, flags=0, copy=True, track=False): """send a numpy array with metadata""" md = dict( dtype = str(A.dtype), shape = A.shape, ) socket.send_json(md, flags|zmq.SNDMORE) return socket.send(A, flags, copy=copy, track=track) def recv_array(socket, flags=0, copy=True, track=False): """recv a numpy array""" md = socket.recv_json(flags=flags) msg = socket.recv(flags=flags, copy=copy, track=track) buf = buffer(msg) A = numpy.frombuffer(buf, dtype=md['dtype']) return A.reshape(md['shape'])2 và import numpy def send_array(socket, A, flags=0, copy=True, track=False): """send a numpy array with metadata""" md = dict( dtype = str(A.dtype), shape = A.shape, ) socket.send_json(md, flags|zmq.SNDMORE) return socket.send(A, flags, copy=copy, track=track) def recv_array(socket, flags=0, copy=True, track=False): """recv a numpy array""" md = socket.recv_json(flags=flags) msg = socket.recv(flags=flags, copy=copy, track=track) buf = buffer(msg) A = numpy.frombuffer(buf, dtype=md['dtype']) return A.reshape(md['shape'])3. Các phương pháp này được thiết kế để thuận tiện, không phải cho hiệu suất, vì vậy các nhà phát triển muốn nhấn mạnh hiệu suất nên sử dụng các phương thức gửi/RECV được tuần tự hóa của riêng họ. Sử dụng tuần tự hóa của riêng bạnNói chung, bạn sẽ muốn cung cấp tuần tự hóa của riêng bạn được tối ưu hóa cho ứng dụng hoặc thư viện của bạn. Điều này có thể bao gồm sử dụng tuần tự hóa ưa thích của riêng bạn ([MsgPack], [Protobuf]) hoặc thêm nén qua [ZLIB] trong thư viện tiêu chuẩn hoặc thư viện siêu nhanh [BLOSC]. Có hai mô hình đơn giản để thực hiện tuần tự hóa của riêng bạn: viết một hàm lấy ổ cắm làm đối số hoặc ổ cắm phân lớp để sử dụng trong các ứng dụng của riêng bạn. Chẳng hạn, dưa chua thường có thể được giảm đáng kể về kích thước bằng cách nén dữ liệu.Những điều sau đây sẽ gửi dưa chua nén qua dây: import zlib, cPickle as pickle def send_zipped_pickle(socket, obj, flags=0, protocol=-1): """pickle an object, and zip the pickle before sending it""" p = pickle.dumps(obj, protocol) z = zlib.compress(p) return socket.send(z, flags=flags) def recv_zipped_pickle(socket, flags=0, protocol=-1): """inverse of send_zipped_pickle""" z = socket.recv(flags) p = zlib.decompress(z) return pickle.loads(p) Một cấu trúc dữ liệu phổ biến trong Python là mảng numpy.PYZMQ hỗ trợ gửi các mảng numpy mà không sao chép bất kỳ dữ liệu nào, vì chúng cung cấp giao diện bộ đệm Python.Tuy nhiên, chỉ cần bộ đệm không đủ thông tin để xây dựng lại mảng ở phía nhận.Dưới đây là một ví dụ về SEND/RECV cho phép gửi/recvs của các mảng không bao gồm dữ liệu DTYPE/hình dạng cần thiết để xây dựng lại mảng. import numpy def send_array(socket, A, flags=0, copy=True, track=False): """send a numpy array with metadata""" md = dict( dtype = str(A.dtype), shape = A.shape, ) socket.send_json(md, flags|zmq.SNDMORE) return socket.send(A, flags, copy=copy, track=track) def recv_array(socket, flags=0, copy=True, track=False): """recv a numpy array""" md = socket.recv_json(flags=flags) msg = socket.recv(flags=flags, copy=copy, track=track) buf = buffer(msg) A = numpy.frombuffer(buf, dtype=md['dtype']) return A.reshape(md['shape'])
|