Merge pull request #7798 from jasongrout/buffer-memoryview

Extract session buffers as memoryviews
This commit is contained in:
Min RK 2015-03-20 09:49:27 -04:00
commit 0fa751b894
2 changed files with 5 additions and 2 deletions

View File

@ -8,6 +8,7 @@ import os
import json import json
import struct import struct
import warnings import warnings
import sys
try: try:
from urllib.parse import urlparse # Py 3 from urllib.parse import urlparse # Py 3
@ -43,6 +44,8 @@ def serialize_binary_message(msg):
# don't modify msg or buffer list in-place # don't modify msg or buffer list in-place
msg = msg.copy() msg = msg.copy()
buffers = list(msg.pop('buffers')) buffers = list(msg.pop('buffers'))
if sys.version_info < (3, 4):
buffers = [x.tobytes() for x in buffers]
bmsg = json.dumps(msg, default=date_default).encode('utf8') bmsg = json.dumps(msg, default=date_default).encode('utf8')
buffers.insert(0, bmsg) buffers.insert(0, bmsg)
nbufs = len(buffers) nbufs = len(buffers)

View File

@ -13,14 +13,14 @@ from ..base.zmqhandlers import (
def test_serialize_binary(): def test_serialize_binary():
s = Session() s = Session()
msg = s.msg('data_pub', content={'a': 'b'}) msg = s.msg('data_pub', content={'a': 'b'})
msg['buffers'] = [ os.urandom(3) for i in range(3) ] msg['buffers'] = [ memoryview(os.urandom(3)) for i in range(3) ]
bmsg = serialize_binary_message(msg) bmsg = serialize_binary_message(msg)
nt.assert_is_instance(bmsg, bytes) nt.assert_is_instance(bmsg, bytes)
def test_deserialize_binary(): def test_deserialize_binary():
s = Session() s = Session()
msg = s.msg('data_pub', content={'a': 'b'}) msg = s.msg('data_pub', content={'a': 'b'})
msg['buffers'] = [ os.urandom(2) for i in range(3) ] msg['buffers'] = [ memoryview(os.urandom(2)) for i in range(3) ]
bmsg = serialize_binary_message(msg) bmsg = serialize_binary_message(msg)
msg2 = deserialize_binary_message(bmsg) msg2 = deserialize_binary_message(bmsg)
nt.assert_equal(msg2, msg) nt.assert_equal(msg2, msg)