diff options
author | Shea Rozmiarek <uberpanzermensch@gmail.com> | 2017-12-08 00:34:22 -0600 |
---|---|---|
committer | Shea Rozmiarek <uberpanzermensch@gmail.com> | 2017-12-10 07:02:10 -0600 |
commit | 48166a79c7dd484e082c09594c4abe44cf75da20 (patch) | |
tree | 56b7734da248ace186913b3ddb8bb313cd9ce1f2 /compose/parallel.py | |
parent | 0c5e82955ebb5f45cfc393b674879be384709b5d (diff) |
Add COMPOSE_PARALLEL_LIMIT to restrict global number of parallel operations
Signed-off-by: Shea Rozmiarek <uberpanzermensch@gmail.com>
Diffstat (limited to 'compose/parallel.py')
-rw-r--r-- | compose/parallel.py | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/compose/parallel.py b/compose/parallel.py index f271561f..4f881c8f 100644 --- a/compose/parallel.py +++ b/compose/parallel.py @@ -15,6 +15,8 @@ from six.moves.queue import Queue from compose.cli.colors import green from compose.cli.colors import red from compose.cli.signals import ShutdownException +from compose.config.environment import Environment +from compose.const import PARALLEL_LIMIT from compose.errors import HealthCheckFailed from compose.errors import NoHealthCheckConfigured from compose.errors import OperationFailedError @@ -26,6 +28,18 @@ log = logging.getLogger(__name__) STOP = object() +def get_configured_limit(): + limit = Environment.from_command_line({'COMPOSE_PARALLEL_LIMIT': None})['COMPOSE_PARALLEL_LIMIT'] + if limit: + limit = int(limit) + else: + limit = PARALLEL_LIMIT + return limit + + +global_limiter = Semaphore(get_configured_limit()) + + def parallel_execute(objects, func, get_name, msg, get_deps=None, limit=None, parent_objects=None): """Runs func on objects in parallel while ensuring that func is ran on object only after it is ran on all its dependencies. @@ -173,7 +187,7 @@ def producer(obj, func, results, limiter): The entry point for a producer thread which runs func on a single object. Places a tuple on the results queue once func has either returned or raised. """ - with limiter: + with limiter, global_limiter: try: result = func(obj) results.put((obj, result, None)) |