diff options
author | Inada Naoki <songofacandy@gmail.com> | 2019-05-28 12:02:52 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-28 12:02:52 (GMT) |
commit | 9a7e5b1b42abcedb895b1ce49d83fe067d01835c (patch) | |
tree | ed8b62255e53b785f13dd4130b2d22540b352aed /Lib/concurrent | |
parent | 293e9f86b8d10fcd88d6a2015babae76e9a8bd8f (diff) | |
download | cpython-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')
-rw-r--r-- | Lib/concurrent/futures/thread.py | 11 |
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") |