|
@@ -24,6 +24,7 @@ import random
|
|
|
import select
|
|
|
import socket
|
|
|
import struct
|
|
|
+import sys
|
|
|
import time
|
|
|
|
|
|
from collections import deque, namedtuple
|
|
@@ -53,7 +54,17 @@ try:
|
|
|
from struct import unpack_from as _unpack_from
|
|
|
memoryview = memoryview
|
|
|
readcanbuf = True
|
|
|
+
|
|
|
+ if sys.version_info[0] == 2 and sys.version_info < (2, 7, 6):
|
|
|
+
|
|
|
+ def unpack_from(fmt, view, _unpack_from=_unpack_from): # noqa
|
|
|
+ return _unpack_from(fmt, view.tobytes()) # <- memoryview
|
|
|
+ else:
|
|
|
+ # unpack_from supports memoryview in 2.7.6 and 3.3+
|
|
|
+ unpack_from = _unpack_from # noqa
|
|
|
+
|
|
|
except (ImportError, NameError): # pragma: no cover
|
|
|
+ raise
|
|
|
|
|
|
def __read__(fd, buf, size, read=os.read): # noqa
|
|
|
chunk = read(fd, size)
|
|
@@ -63,8 +74,8 @@ except (ImportError, NameError): # pragma: no cover
|
|
|
return n
|
|
|
readcanbuf = False # noqa
|
|
|
|
|
|
- def _unpack_from(fmt, buf, unpack=struct.unpack): # noqa
|
|
|
- return unpack(fmt, buf.getvalue())
|
|
|
+ def unpack_from(fmt, iobuf, unpack=struct.unpack): # noqa
|
|
|
+ return unpack(fmt, iobuf.getvalue()) # <-- BytesIO
|
|
|
|
|
|
|
|
|
logger = get_logger(__name__)
|
|
@@ -173,7 +184,7 @@ class ResultHandler(_pool.ResultHandler):
|
|
|
|
|
|
def _recv_message(self, add_reader, fd, callback,
|
|
|
__read__=__read__, readcanbuf=readcanbuf,
|
|
|
- BytesIO=BytesIO, unpack_from=_unpack_from,
|
|
|
+ BytesIO=BytesIO, unpack_from=unpack_from,
|
|
|
load=_pickle.load):
|
|
|
Hr = Br = 0
|
|
|
if readcanbuf:
|