[Python-ideas] Atomic counter / atomic increment

M.-A. Lemburg mal at egenix.com
Thu Aug 25 14:01:30 EDT 2016


On 25.08.2016 19:31, Ben Hoyt wrote:
> I had to implement a simple atomic counter the other day to count the total
> number of requests processed in a multi-threaded Python web server.
> 
> I was doing a demo of "how cool Python is" to my colleagues, and they were
> generally wowed, but one of the things that made them do a double-take
> (coming mostly from Scala/Java) was that there was no atomic counter in the
> standard library.
> 
> The fact that I and many other folks have implemented such things makes me
> wonder if it should be in the standard library.

As long as Python uses a GIL to protect C level function
calls, you can use an iterator for this:

import itertools
x = itertools.count()
...
mycount = next(x)
...

The trick here is that the CALL_FUNCTION byte code will trigger
the increment of the iterator. Since this is implemented in C,
the GIL will serve as lock on the iterator while it is
being incremented.

With Python 4.0, this will all be different, though :-)

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Experts (#1, Aug 25 2016)
>>> Python Projects, Coaching and Consulting ...  http://www.egenix.com/
>>> Python Database Interfaces ...           http://products.egenix.com/
>>> Plone/Zope Database Interfaces ...           http://zope.egenix.com/
________________________________________________________________________

::: We implement business ideas - efficiently in both time and costs :::

   eGenix.com Software, Skills and Services GmbH  Pastor-Loeh-Str.48
    D-40764 Langenfeld, Germany. CEO Dipl.-Math. Marc-Andre Lemburg
           Registered at Amtsgericht Duesseldorf: HRB 46611
               http://www.egenix.com/company/contact/
                      http://www.malemburg.com/



More information about the Python-ideas mailing list