Issue #17025: Add dumps() and loads() to ForkingPickler.

This commit is contained in:
Charles-François Natali 2013-03-24 15:21:49 +01:00
parent 89e6b31845
commit a655075d16
2 changed files with 13 additions and 5 deletions

View File

@ -12,7 +12,6 @@ __all__ = [ 'Client', 'Listener', 'Pipe', 'wait' ]
import io import io
import os import os
import sys import sys
import pickle
import select import select
import socket import socket
import struct import struct
@ -202,9 +201,7 @@ class _ConnectionBase:
"""Send a (picklable) object""" """Send a (picklable) object"""
self._check_closed() self._check_closed()
self._check_writable() self._check_writable()
buf = io.BytesIO() self._send_bytes(ForkingPickler.dumps(obj))
ForkingPickler(buf, pickle.HIGHEST_PROTOCOL).dump(obj)
self._send_bytes(buf.getbuffer())
def recv_bytes(self, maxlength=None): def recv_bytes(self, maxlength=None):
""" """
@ -249,7 +246,7 @@ class _ConnectionBase:
self._check_closed() self._check_closed()
self._check_readable() self._check_readable()
buf = self._recv_bytes() buf = self._recv_bytes()
return pickle.loads(buf.getbuffer()) return ForkingPickler.loads(buf.getbuffer())
def poll(self, timeout=0.0): def poll(self, timeout=0.0):
"""Whether there is any input available to be read""" """Whether there is any input available to be read"""

View File

@ -7,7 +7,9 @@
# Licensed to PSF under a Contributor Agreement. # Licensed to PSF under a Contributor Agreement.
# #
import io
import os import os
import pickle
import sys import sys
import signal import signal
import errno import errno
@ -44,6 +46,15 @@ class ForkingPickler(Pickler):
def register(cls, type, reduce): def register(cls, type, reduce):
cls._extra_reducers[type] = reduce cls._extra_reducers[type] = reduce
@staticmethod
def dumps(obj):
buf = io.BytesIO()
ForkingPickler(buf, pickle.HIGHEST_PROTOCOL).dump(obj)
return buf.getbuffer()
loads = pickle.loads
def _reduce_method(m): def _reduce_method(m):
if m.__self__ is None: if m.__self__ is None:
return getattr, (m.__class__, m.__func__.__name__) return getattr, (m.__class__, m.__func__.__name__)