Skip to content
9 changes: 8 additions & 1 deletion Lib/multiprocessing/synchronize.py
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,8 @@ def wait(self, timeout=None):

def __repr__(self):
set_status = 'set' if self.is_set() else 'unset'
return f"<{type(self).__qualname__} at {id(self):#x} {set_status}>"
return f"<{type(self).__qualname__}({set_status})>"

#
# Barrier
#
Expand Down Expand Up @@ -409,3 +410,9 @@ def _count(self):
@_count.setter
def _count(self, value):
self._array[1] = value

def __repr__(self):
name = self.__class__.__qualname__
if self.broken:
return f"<{name}(broken)>"
return (f"<{name}(waiters={self.n_waiting}/{self.parties})>")
18 changes: 15 additions & 3 deletions Lib/test/_test_multiprocessing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2133,11 +2133,11 @@ def test_event(self):
def test_repr(self) -> None:
event = self.Event()
if self.TYPE == 'processes':
self.assertRegex(repr(event), r"<Event at .* unset>")
self.assertIn("<Event(unset)>", repr(event))
event.set()
self.assertRegex(repr(event), r"<Event at .* set>")
self.assertIn("<Event(set)>", repr(event))
event.clear()
self.assertRegex(repr(event), r"<Event at .* unset>")
self.assertIn("<Event(unset)>", repr(event))
elif self.TYPE == 'manager':
self.assertRegex(repr(event), r"<EventProxy object, typeid 'Event' at .*")
event.set()
Expand Down Expand Up @@ -2504,6 +2504,18 @@ def test_thousand(self):
for j in range(self.N):
self.assertEqual(conn.recv(), i)

def test_repr(self):
b = self.barrier
if self.TYPE == 'process':
self.assertIn(f"waiters=0/{self.N}", repr(b))
b.abort()
self.assertIn("broken", repr(b))
self.assertNotIn("at", repr(b))
elif self.TYPE == 'manager':
self.assertRegex(repr(b), r"<BarrierProxy object, typeid 'Barrier' at .*")
b.abort()
self.assertRegex(repr(b), r"<BarrierProxy object, typeid 'Barrier' at .*")

#
#
#
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Change the ``__repr__`` of :class:`multiprocessing.Event` and add a ``__repr__`` method to the :class:`multiprocessing.Barrier` in order to be consistent with the other synchronization primitives of :mod:`multiprocessing` module.
Loading