Pickled objects over the network

Jean-Paul Calderone exarkun at divmod.com
Wed Jul 18 05:52:48 EDT 2007


On Tue, 17 Jul 2007 14:57:16 -0700, Walker Lindley <brotherjenos at gmail.com> wrote:
>I'm working on a distributed computing program and need to send Python
>objects over a TCP socket. Specifically, the objects that I'm working with
>subclass the builtin list type (I don't know whether or not that matters),
>but also include other data fields. These objects are put into dictionaries
>along with some other control information and the dictionaries are pickled
>and sent across the network. I'm using the makefile() function in socket to
>get a file descriptor for the socket and then calling pickle.dump with the
>dictionary object and the socket file descriptor. I was originally using
>pickle protocol 0, but then read about the possibility of buffering problems
>and realized that protocol 0 was giving me strings about 1500 characters
>long. After some testing, I settled on protocol 2 which manages to package
>the data into about 400 characters.
>
>In any case, the client side of the program appears to send the data just
>fine, at least as far as I can tell. On the server side, however, the data
>takes a very long time to get there and then I get an error in the pickle
>module:
>Traceback (most recent call last):
>  File "server.py", line 176, in <module>
>    serv.runServer()
>  File "server.py", line 99, in runServer
>    recvPacket = pickle.load(clientFile)
>  File "/usr/lib/python2.5/pickle.py", line 1370, in load
>    return Unpickler(file).load()
>  File "/usr/lib/python2.5/pickle.py", line 858, in load
>    dispatch[key](self)
>  File "/usr/lib/python2.5/pickle.py", line 1187, in load_appends
>    mark = self.marker()
>  File "/usr/lib/python2.5/pickle.py", line 874, in marker
>    while stack[k] is not mark: k = k-1
>IndexError: list index out of range
>
>Hopefully I'm doing something obviously wrong, but if anyone can help based
>on that description or if you need to see the source, please let me know
>(it's GPL'd). Thank you so much for any help.
>

The obvious thing you're doing wrong is using pickle over a network. ;)

  http://jcalderone.livejournal.com/15864.html

Jean-Paul



More information about the Python-list mailing list