diff options
author | Richard Oudkerk <shibturn@gmail.com> | 2012-06-15 17:26:07 (GMT) |
---|---|---|
committer | Richard Oudkerk <shibturn@gmail.com> | 2012-06-15 17:26:07 (GMT) |
commit | 3730a17a58d9058b0880202050a8c1e4ea193e8f (patch) | |
tree | 4dcc6136ee97567e2a9098e10865bff76929823b /Lib/multiprocessing/synchronize.py | |
parent | a6bc4b4c85dff9ccd0f91a1e10ac107e59c487a5 (diff) | |
download | cpython-3730a17a58d9058b0880202050a8c1e4ea193e8f.zip cpython-3730a17a58d9058b0880202050a8c1e4ea193e8f.tar.gz cpython-3730a17a58d9058b0880202050a8c1e4ea193e8f.tar.bz2 |
Issue #14059: Implement multiprocessing.Barrier
Diffstat (limited to 'Lib/multiprocessing/synchronize.py')
-rw-r--r-- | Lib/multiprocessing/synchronize.py | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Lib/multiprocessing/synchronize.py b/Lib/multiprocessing/synchronize.py index 4502a97..22eabe5 100644 --- a/Lib/multiprocessing/synchronize.py +++ b/Lib/multiprocessing/synchronize.py @@ -333,3 +333,43 @@ class Event(object): return False finally: self._cond.release() + +# +# Barrier +# + +class Barrier(threading.Barrier): + + def __init__(self, parties, action=None, timeout=None): + import struct + from multiprocessing.heap import BufferWrapper + wrapper = BufferWrapper(struct.calcsize('i') * 2) + cond = Condition() + self.__setstate__((parties, action, timeout, cond, wrapper)) + self._state = 0 + self._count = 0 + + def __setstate__(self, state): + (self._parties, self._action, self._timeout, + self._cond, self._wrapper) = state + self._array = self._wrapper.create_memoryview().cast('i') + + def __getstate__(self): + return (self._parties, self._action, self._timeout, + self._cond, self._wrapper) + + @property + def _state(self): + return self._array[0] + + @_state.setter + def _state(self, value): + self._array[0] = value + + @property + def _count(self): + return self._array[1] + + @_count.setter + def _count(self, value): + self._array[1] = value |