pickle problem
castironpi at gmail.com
castironpi at gmail.com
Thu May 8 20:29:57 EDT 2008
On May 8, 4:35 pm, Hrvoje Niksic <hnik... at xemacs.org> wrote:
> Marc 'BlackJack' Rintsch <bj_... 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()
I, local, am mystified that you'd want to pickle a socket. It's a
live connection, which flies on a pocket dollar. You don't want it on
disk, do you?
If you're running a net buoy through a cluster somewhere, do you want
to drop a server and reconnect? Is Amazon's EC2 up and running?
Certainly no one was talking on the internet. Were you?
I don't think you hit anything but banks surfing the web, and the
American dollar is notoriously stuffy. Pump a wi-fi to a diner,
though, and you're just talking more. Where's Usenet?
More information about the Python-list
mailing list