Update futures to 3.2.0

This commit is contained in:
Labrys of Knossos 2018-12-16 10:24:14 -05:00
commit 49c9ea1350
5 changed files with 204 additions and 185 deletions

View file

@ -43,20 +43,14 @@ Process #1..n:
_ResultItems in "Request Q"
"""
from __future__ import with_statement
import atexit
from concurrent.futures import _base
import Queue as queue
import multiprocessing
import threading
import weakref
import sys
from concurrent.futures import _base
try:
import queue
except ImportError:
import Queue as queue
__author__ = 'Brian Quinlan (brian@sweetapp.com)'
# Workers are created as daemon threads and processes. This is done to allow the
@ -79,11 +73,11 @@ _shutdown = False
def _python_exit():
global _shutdown
_shutdown = True
items = list(_threads_queues.items())
items = list(_threads_queues.items()) if _threads_queues else ()
for t, q in items:
q.put(None)
for t, q in items:
t.join()
t.join(sys.maxint)
# Controls how many more calls than processes will be queued in the call queue.
# A smaller number will mean that processes spend more time idle waiting for
@ -132,7 +126,7 @@ def _process_worker(call_queue, result_queue):
return
try:
r = call_item.fn(*call_item.args, **call_item.kwargs)
except BaseException:
except:
e = sys.exc_info()[1]
result_queue.put(_ResultItem(call_item.work_id,
exception=e))
@ -220,6 +214,8 @@ def _queue_management_worker(executor_reference,
work_item.future.set_exception(result_item.exception)
else:
work_item.future.set_result(result_item.result)
# Delete references to object. See issue16284
del work_item
# Check whether we should start shutting down.
executor = executor_reference()
# No more work items can be added if:
@ -266,6 +262,7 @@ def _check_system_limits():
_system_limited = "system provides too few semaphores (%d available, 256 necessary)" % nsems_max
raise NotImplementedError(_system_limited)
class ProcessPoolExecutor(_base.Executor):
def __init__(self, max_workers=None):
"""Initializes a new ProcessPoolExecutor instance.
@ -280,6 +277,9 @@ class ProcessPoolExecutor(_base.Executor):
if max_workers is None:
self._max_workers = multiprocessing.cpu_count()
else:
if max_workers <= 0:
raise ValueError("max_workers must be greater than 0")
self._max_workers = max_workers
# Make the call queue slightly larger than the number of processes to
@ -351,7 +351,7 @@ class ProcessPoolExecutor(_base.Executor):
# Wake up queue management thread
self._result_queue.put(None)
if wait:
self._queue_management_thread.join()
self._queue_management_thread.join(sys.maxint)
# To reduce the risk of openning too many files, remove references to
# objects that use file descriptors.
self._queue_management_thread = None