Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   threads, mutual exclusion, and lists (http://www.velocityreviews.com/forums/t529490-threads-mutual-exclusion-and-lists.html)

Scott 08-15-2007 07:36 PM

threads, mutual exclusion, and lists
 
I have two threads that share a python list. One thread adds to the
list with append(), the other thread removes items with pop().

My question is -- are python list operations atomic? If they are not,
then I assume I need to put some mutual exclusion around the append()
and pop() calls ?

Thanks,
Scott


danmcleran@yahoo.com 08-15-2007 07:38 PM

Re: threads, mutual exclusion, and lists
 
On Aug 15, 1:36 pm, Scott <smba...@gmail.com> wrote:
> I have two threads that share a python list. One thread adds to the
> list with append(), the other thread removes items with pop().
>
> My question is -- are python list operations atomic? If they are not,
> then I assume I need to put some mutual exclusion around the append()
> and pop() calls ?
>
> Thanks,
> Scott


You might want to consider using a Queue instead. It is designed to be
thread-safe.


=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?= 08-15-2007 10:46 PM

Re: threads, mutual exclusion, and lists
 
> I have two threads that share a python list. One thread adds to the
> list with append(), the other thread removes items with pop().
>
> My question is -- are python list operations atomic?


Yes, they are in the current implementation of CPython (all versions).
Notice that not *all* operations are atomic (e.g. .sort() is not),
but both append and pop happen to be atomic (which is primarily because
they don't need to call back to user-defined functions, unlike sort).

It's not a language property, though; things may be different in Jython
or IronPython.

Regards,
Martin

Matt McCredie 08-15-2007 11:08 PM

Re: threads, mutual exclusion, and lists
 
> My question is -- are python list operations atomic? If they are not,
> then I assume I need to put some mutual exclusion around the append()
> and pop() calls ?


They are not, but there is one included in the standard library:
http://docs.python.org/dev/lib/module-Queue.html

Matt

=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?= 08-16-2007 07:06 AM

Re: threads, mutual exclusion, and lists
 
>> My question is -- are python list operations atomic? If they are not,
>> then I assume I need to put some mutual exclusion around the append()
>> and pop() calls ?

>
> They are not, but there is one included in the standard library:
> http://docs.python.org/dev/lib/module-Queue.html


Why do you think they are not?

Regards,
Martin

Matt McCredie 08-16-2007 04:45 PM

Re: threads, mutual exclusion, and lists
 
> Why do you think they are not?

Because they aren't. You even mentioned that a few operations that
aren't atomic. If operations are atomic it isn't necessarily because
of the design of the list, but the design of CPython. More
specifically the GIL. I don't mean to imply that you can't get a
multi-threaded app to communicate using lists, but the Queue is
explicitly built for it and better suited.

Matt

=?ISO-8859-1?Q?=22Martin_v=2E_L=F6wis=22?= 08-16-2007 04:54 PM

Re: threads, mutual exclusion, and lists
 
>> Why do you think they are not?
>
> Because they aren't. You even mentioned that a few operations that
> aren't atomic.


OTOH, the OP specifically asked for .append() and .pop(), which are
atomic.

Regards,
Martin


All times are GMT. The time now is 02:52 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.