pickle problem
Hrvoje Niksic
hniksic at xemacs.org
Thu May 8 17:35:04 EDT 2008
Marc 'BlackJack' Rintsch <bj_666 at gmx.net> writes:
> On Thu, 08 May 2008 08:55:35 -0700, krustymonkey wrote:
>
>> The thing is, I'm not using slots by choice. I'm using the standard
>> lib "socket" class, which apparently uses slots.
>
> `socket` objects can't be pickled. Not just because of the
> `__slot__`\s but because a substantial part of their state lives in
> the operating system's space.
Of course, if it makes sense to pickle sockets in the application, one
is can do so by defining __getstate__ and __setstate__:
class Connection(object):
def __init__(self, host, port):
self.host = host
self.port = port
self.init_sock()
def init_sock(self):
self.sock = socket.socket()
self.sock.connect((host, port))
... init communication ...
def __getstate__(self):
# pickle self as a (host, port) pair
return self.host, self.port
def __setstate__(self, state):
# reinstate self by setting host and port and
# recreating the socket
self.host, self.port = state
self.init_sock()
More information about the Python-list
mailing list