summaryrefslogtreecommitdiffstats
path: root/Lib/concurrent/futures
diff options
context:
space:
mode:
authorInada Naoki <songofacandy@gmail.com>2019-05-28 12:02:52 (GMT)
committerGitHub <noreply@github.com>2019-05-28 12:02:52 (GMT)
commit9a7e5b1b42abcedb895b1ce49d83fe067d01835c (patch)
treeed8b62255e53b785f13dd4130b2d22540b352aed /Lib/concurrent/futures
parent293e9f86b8d10fcd88d6a2015babae76e9a8bd8f (diff)
downloadcpython-9a7e5b1b42abcedb895b1ce49d83fe067d01835c.zip
cpython-9a7e5b1b42abcedb895b1ce49d83fe067d01835c.tar.gz
cpython-9a7e5b1b42abcedb895b1ce49d83fe067d01835c.tar.bz2
bpo-35279: reduce default max_workers of ThreadPoolExecutor (GH-13618)
Diffstat (limited to 'Lib/concurrent/futures')
-rw-r--r--Lib/concurrent/futures/thread.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py
index ad6b4c2..2426e94 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -129,9 +129,14 @@ class ThreadPoolExecutor(_base.Executor):
initargs: A tuple of arguments to pass to the initializer.
"""
if max_workers is None:
- # Use this number because ThreadPoolExecutor is often
- # used to overlap I/O instead of CPU work.
- max_workers = (os.cpu_count() or 1) * 5
+ # ThreadPoolExecutor is often used to:
+ # * CPU bound task which releases GIL
+ # * I/O bound task (which releases GIL, of course)
+ #
+ # We use cpu_count + 4 for both types of tasks.
+ # But we limit it to 32 to avoid consuming surprisingly large resource
+ # on many core machine.
+ max_workers = min(32, (os.cpu_count() or 1) + 4)
if max_workers <= 0:
raise ValueError("max_workers must be greater than 0")