Kyle Stanley <aeros...@gmail.com> added the comment:
I can't be certain for the other failures, but I'm currently exploring a potential solution for addressing the `test_killed_child` failure. To me, it seems to be a race condition with attempting to call _ThreadWakeup.close() while there are still bytes being sent. IMO, we should wait until closing the pipe's reader and writer until it's finished sending or receiving bytes. Here's one way to implement that w/ threading.Event: diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py index 8e9b69a8f0..9bf073fc34 100644 --- a/Lib/concurrent/futures/process.py +++ b/Lib/concurrent/futures/process.py @@ -68,21 +68,30 @@ class _ThreadWakeup: def __init__(self): self._closed = False self._reader, self._writer = mp.Pipe(duplex=False) + # Used to ensure pipe is not closed while sending or receiving bytes + self._not_running = threading.Event() + # Initialize event as True + self._not_running.set() def close(self): if not self._closed: + self._not_running.wait() self._closed = True self._writer.close() self._reader.close() def wakeup(self): if not self._closed: + self._not_running.clear() self._writer.send_bytes(b"") + self._not_running.set() def clear(self): if not self._closed: + self._not_running.clear() while self._reader.poll(): self._reader.recv_bytes() + self._not_running.set() >From using Victor's method of replicating the failure with inserting a >`time.sleep(0.050)` in multiprocessing.Connection._send(), it appears to fix >the failure in test_killed_child. I believe it would also fix the other >failures since they appear to be caused by the same core issue, but I've been >unable to replicate them locally so I'm not 100% certain. ---------- assignee: -> aeros _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue39995> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com