Writing to same file from two threads
solipsis at pitrou.net
Wed Feb 27 14:26:18 CET 2013
Jens Thoms Toerring <jt <at> toerring.de> writes:
> Paul Rubin <no.email <at> nospam.invalid> wrote:
> > jt <at> toerring.de (Jens Thoms Toerring) writes:
> > > in garbled output (i.e. having some output from A inside a
> > > line written by B or vice versae) because the "main thread" or
> > Yes they do get garbled like that. Preferred Python style is put a
> > single thread in charge of all the i/o to that file, and communicate
> > with it by message passing through Queue objects. That is safer than
> > directly using locks.
> Thank you for confirmig my suspicion But you have induced
> another question: why is using a Queue safer than locking (not
> that I doubt that it might be more elegant etc.). Is it "safer"
> because it's less likely that one gets it wrong (e.g. by for-
> grtting to acquire the lock) or is there something inherently
> unsafe about locks?
For the record, binary files are thread-safe in Python 3, but text files
Locks are safe if you use them well. As you point out, if you forget
to acquire your lock, or if you devise a situation where there is a
deadlock between competing locks, you can have difficult to diagnose
issues. Queues have their internal locking all done for you.
More information about the Python-list