Noah Levitt 2017-07-07 14:54:55 -07:00
parent 5a8d1610e6
commit b1a8fecd9d
2 changed files with 18 additions and 11 deletions

View File

@ -50,7 +50,7 @@ except:
setuptools.setup(
name='warcprox',
version='2.1b1.dev92',
version='2.1b1.dev93',
description='WARC writing MITM HTTP/S proxy',
url='https://github.com/internetarchive/warcprox',
author='Noah Levitt',

View File

@ -52,7 +52,6 @@ try:
import socketserver
except ImportError:
import SocketServer as socketserver
import resource
import concurrent.futures
import urlcanon
import time
@ -440,6 +439,8 @@ class PooledMixIn(socketserver.ThreadingMixIn):
# man getrlimit: "RLIMIT_NPROC The maximum number of processes (or,
# more precisely on Linux, threads) that can be created for the
# real user ID of the calling process."
try:
import resource
rlimit_nproc = resource.getrlimit(resource.RLIMIT_NPROC)[0]
rlimit_nofile = resource.getrlimit(resource.RLIMIT_NOFILE)[0]
max_threads = min(rlimit_nofile // 10, rlimit_nproc // 2)
@ -449,6 +450,12 @@ class PooledMixIn(socketserver.ThreadingMixIn):
self.logger.info(
"max_threads=%s (rlimit_nproc=%s, rlimit_nofile=%s)",
max_threads, rlimit_nproc, rlimit_nofile)
except Exception as e:
self.logger.warn(
"unable to calculate optimal number of threads based "
"on resource limits due to %s", e)
max_threads = 100
self.logger.info("max_threads=%s", max_threads)
self.max_threads = max_threads
self.pool = concurrent.futures.ThreadPoolExecutor(max_threads)