[Tutor] Changing instance attributes in different threads
Kent Johnson
kent37 at tds.net
Mon Feb 6 23:13:43 CET 2006
Bernard Lebel wrote:
> Hello,
>
> I have an instance attribute (a few characters string) that two
> separate threads may change, potentially both at the same time.
> My program doesn't implement thread safety for this particular task.
>
> So far I have never run into issues with this, but I have been reading
> about data corruption when two threads try to write to the same data
> at once. I'm just about to deploy my program over 70 computers, so now
> I'm having some seconds thoughts of dread.
>
> Should changing instance attributes be done with maximum thread
> safety? That is, to use some sort of queue (like the Queue class) so
> that all changes to the attribute goes through this queue and can
> never happen concurrently?
Are you talking about a simple assignment like self.x = 'abc'? If there
is no Python code invoked by setting the attribute, I think the
attribute will always be correctly set to the value from one of the
threads. In this case the setattr will happen in a single Python byte
code and it will be atomic. In other words, both of the sets will
succeed and which ever one happens last will persist.
If you *care* which of the setattrs succeeds, then you have a race
condition that you need to address somehow.
If Python code is invoked by setting the attribute then you could have a
problem. This could happen, for example, if the attribute is a property,
if the class (or one of its base classes) overrides __setattr__(), and
probably in several other ways I haven't thought of. In this case you
need to look at whether the Python code is thread-safe.
Kent
More information about the Tutor
mailing list