[issue8777] Add threading.Barrier

Kristján Valur Jónsson report at bugs.python.org
Wed Oct 27 03:06:24 CEST 2010


Kristján Valur Jónsson <kristjan at ccpgames.com> added the comment:

Okay, here is a new submission.
I've redesigned it to be more reminiscent of the Java version, by allowing the barrier to have a "Broken" state and raising a BrokenBarrierError.
I've also redesigned the mechanism from a simple perpetually increasing index of "entered" and "released" into a proper two-state machine which is either "filling" or "draining".

There is also a rather comprehensive set of tests.

What is missing is documentation, somethign I shall add if this gets a positive response.

Note how, in the tests, I sometimes create a "barrier2" object to facilitate external synchronization.  This demonstrates the simplicity of using this primitive.

Another note:  In order to implement "timeout" behaviour, I changed Condition.wait() to return True in case it returns due to a timeout occurring.  I folded this into this patch, but if such a change is not accepted, or we want it separately, then I'll have to remove the timeout functionality from the Barrier.  I don't want to have complicated logic in there to measure time.  Also, I do think that locking primitives that time out should be able to provide an indication to that fact to their callers, so condition.wait() really should do that.

----------
Added file: http://bugs.python.org/file19379/barrier3.patch

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue8777>
_______________________________________


More information about the Python-bugs-list mailing list