pickle problem
Diez B. Roggisch
deets at nospam.web.de
Thu May 8 06:48:39 EDT 2008
krustymonkey at gmail.com wrote:
> I'm wondering if anyone can help with a workaround for a problem I
> currently have. I'm trying to set up a prefork tcp server.
> Specifically, I'm setting up a server that forks children and has them
> listen on pipes created with os.pipe(). The parent process for the
> group starts an inet:tcp server on a given port. In the parent, after
> a "socket.accept()", I'm trying to pickle the connection object to
> send over an IPC pipe (as stated previously), but I get the following
> error:
>
> File "/usr/lib/python2.4/copy_reg.py", line 76, in _reduce_ex
> raise TypeError("a class that defines __slots__ without "
> TypeError: a class that defines __slots__ without defining
> __getstate__ cannot be pickled
>
> Does anyone know of a workaround for this? Maybe my approach to this
> is wrong? Any help would be appreciated.
The error-message is pretty clear I'd say. You use slots - so you are
responsible yourself for implementing the pickling-protocol using
__getstate__ and __setstate__. Looking at the pickle-docs should give you
an idea.
But the really easy solution is: do not use slots. They are intended as
memory-consumption optimization technique, *not* as "I want to declare my
attributes explicitly"-mechanism. So - get rid of them and be a happy
pickler.
Diez
More information about the Python-list
mailing list