Fix issue #17707: multiprocessing.Queue's get() method does not block for short timeouts.

This commit is contained in:
Giampaolo Rodola' 2013-04-17 13:12:27 +02:00
parent 22b9e651c2
commit 308307190f
3 changed files with 11 additions and 1 deletions

View File

@ -862,7 +862,7 @@ else:
if hasattr(select, 'poll'): if hasattr(select, 'poll'):
def _poll(fds, timeout): def _poll(fds, timeout):
if timeout is not None: if timeout is not None:
timeout = int(timeout) * 1000 # timeout is in milliseconds timeout = int(timeout * 1000) # timeout is in milliseconds
fd_map = {} fd_map = {}
pollster = select.poll() pollster = select.poll()
for fd in fds: for fd in fds:

View File

@ -699,6 +699,13 @@ class _TestQueue(BaseTestCase):
for p in workers: for p in workers:
p.join() p.join()
def test_timeout(self):
q = multiprocessing.Queue()
start = time.time()
self.assertRaises(pyqueue.Empty, q.get, True, 0.2)
delta = time.time() - start
self.assertGreaterEqual(delta, 0.19)
# #
# #
# #

View File

@ -42,6 +42,9 @@ Core and Builtins
Library Library
------- -------
- Issue #17707: multiprocessing.Queue's get() method does not block for short
timeouts.
- Issue #17012: shutil.which() no longer fallbacks to the PATH environment - Issue #17012: shutil.which() no longer fallbacks to the PATH environment
variable if empty path argument is specified. Patch by Serhiy Storchaka. variable if empty path argument is specified. Patch by Serhiy Storchaka.