Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #49244 > unrolled thread

Re: Question about pickle

Started byPhu Sam <psam1304@gmail.com>
First post2013-06-25 17:22 -0700
Last post2013-06-25 17:22 -0700
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Question about pickle Phu Sam <psam1304@gmail.com> - 2013-06-25 17:22 -0700

#49244 — Re: Question about pickle

FromPhu Sam <psam1304@gmail.com>
Date2013-06-25 17:22 -0700
SubjectRe: Question about pickle
Message-ID<mailman.3883.1372243291.3114.python-list@python.org>

[Multipart message — attachments visible in raw view] — view raw

f.seek(0)  really does the trick.

Danke sehr,

Phu


On Tue, Jun 25, 2013 at 6:47 AM, Peter Otten <__peter__@web.de> wrote:

> Phu Sam wrote:
>
> > I have a method that opens a file, lock it, pickle.load the file into a
> > dictionary.
> > I then modify the status of a record, then pickle.dump the dictionary
> back
> > to the file.
> >
> > The problem is that the pickle.dump never works. The file never gets
> > updated.
> >
> > def updateStatus(self, fp, stn, status):
> >           f = open(fp, 'rw+')
> >           fcntl.flock(f.fileno(),fcntl.LOCK_EX | fcntl.LOCK_NB)
> >
> >           tb = pickle.load(f)
> >
> >           self.modifyDict(tb, stn, status)
>
>             f.seek(0)
>
> >           pickle.dump(tb, f)
> >
> >           fcntl.flock(f.fileno(),fcntl.LOCK_UN)
> >           f.close()
> >
> >
> > What could be the problem here?
>
> pickle.load() moves the file position to the end of the (first) pickle.
> pickle.dump() writes the modified dict starting at the current position.
> You
> end up with two versions of the dict, but you'll only ever read the first.
>
> The fix is to go back to the start of the file with f.seek().
>
> > What mode should I use to open the file to allow both pickle.load and
> > pickle.dump?
>
> Assuming that the file already exists when updateStatus() is invoked for
> the
> first time: "r+b".
>
> I usually open the file twice, once for reading and then for writing, but I
> guess that would interfere with locking.
>
> --
> http://mail.python.org/mailman/listinfo/python-list
>

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web