From: Antoine Pitrou Date: Tue, 12 Apr 2011 15:58:11 +0000 (+0200) Subject: Issue #11815: Use a light-weight SimpleQueue for the result queue in concurrent.futur... X-Git-Tag: v3.3.0a1~2614 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b7877f203d66ed693f7dca327963a8ce65c75e03;p=python Issue #11815: Use a light-weight SimpleQueue for the result queue in concurrent.futures.ProcessPoolExecutor. --- diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py index 36cd411fc1..1f4b242454 100644 --- a/Lib/concurrent/futures/process.py +++ b/Lib/concurrent/futures/process.py @@ -49,6 +49,7 @@ import atexit from concurrent.futures import _base import queue import multiprocessing +from multiprocessing.queues import SimpleQueue import threading import weakref @@ -204,7 +205,7 @@ def _queue_manangement_worker(executor_reference, work_ids_queue, call_queue) - result_item = result_queue.get(block=True) + result_item = result_queue.get() if result_item is not None: work_item = pending_work_items[result_item.work_id] del pending_work_items[result_item.work_id] @@ -284,7 +285,7 @@ class ProcessPoolExecutor(_base.Executor): # because futures in the call queue cannot be cancelled. self._call_queue = multiprocessing.Queue(self._max_workers + EXTRA_QUEUED_CALLS) - self._result_queue = multiprocessing.Queue() + self._result_queue = SimpleQueue() self._work_ids = queue.Queue() self._queue_management_thread = None self._processes = set() diff --git a/Misc/NEWS b/Misc/NEWS index cbbde80598..25dfd910c8 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -103,6 +103,9 @@ Core and Builtins Library ------- +- Issue #11815: Use a light-weight SimpleQueue for the result queue in + concurrent.futures.ProcessPoolExecutor. + - Issue #5162: Treat services like frozen executables to allow child spawning from multiprocessing.forking on Windows.