From d535942f3bf713a24404ab410d70ccc2570a0f3e Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 10 Jun 2017 13:10:13 +0200 Subject: [PATCH 1/2] bpo-30595: Fix multiprocessing.Queue.get(timeout) (#2027) multiprocessing.Queue.get() with a timeout now polls its reader in non-blocking mode if it succeeded to aquire the lock but the acquire took longer than the timeout. Co-Authored-By: Grzegorz Grzywacz (cherry picked from commit 1b7863c3b6519c6e134c28cab8b8af0dea43e375) --- Lib/multiprocessing/queues.py | 2 +- .../next/Library/2017-07-26-04-46-12.bpo-30595.-zJ7d8.rst | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2017-07-26-04-46-12.bpo-30595.-zJ7d8.rst diff --git a/Lib/multiprocessing/queues.py b/Lib/multiprocessing/queues.py index 76684172528f930..513807cafecb6dd 100644 --- a/Lib/multiprocessing/queues.py +++ b/Lib/multiprocessing/queues.py @@ -101,7 +101,7 @@ def get(self, block=True, timeout=None): try: if block: timeout = deadline - time.time() - if timeout < 0 or not self._poll(timeout): + if not self._poll(timeout): raise Empty elif not self._poll(): raise Empty diff --git a/Misc/NEWS.d/next/Library/2017-07-26-04-46-12.bpo-30595.-zJ7d8.rst b/Misc/NEWS.d/next/Library/2017-07-26-04-46-12.bpo-30595.-zJ7d8.rst new file mode 100644 index 000000000000000..4a2a3901cc6ee48 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2017-07-26-04-46-12.bpo-30595.-zJ7d8.rst @@ -0,0 +1,3 @@ +multiprocessing.Queue.get() with a timeout now polls its reader in non- +blocking mode if it succeeded to aquire the lock but the acquire took longer +than the timeout. From e19d9570cf3d277b3973b8fccc96b1b237fe26ea Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 13 Jun 2017 23:48:47 +0200 Subject: [PATCH 2/2] bpo-30595: Increase test_queue_feeder_donot_stop_onexc() timeout (#2148) _test_multiprocessing.test_queue_feeder_donot_stop_onexc() now uses a timeout of 1 second on Queue.get(), instead of 0.1 second, for slow buildbots. (cherry picked from commit 8f6eeaf21cdf4aea25fdefeec814a1ce07453fe9) --- Lib/test/_test_multiprocessing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/test/_test_multiprocessing.py b/Lib/test/_test_multiprocessing.py index 871a34e4b26f123..78a6f3e71b8b130 100644 --- a/Lib/test/_test_multiprocessing.py +++ b/Lib/test/_test_multiprocessing.py @@ -782,7 +782,8 @@ def __reduce__(self): q = self.Queue() q.put(NotSerializable()) q.put(True) - self.assertTrue(q.get(timeout=0.1)) + # bpo-30595: use a timeout of 1 second for slow buildbots + self.assertTrue(q.get(timeout=1.0)) # #