# Copyright 2021 The Chromium Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. from __future__ import print_function import contextlib from typing import Generator, Optional from pathos import pools def GetProcessPool(nodes: Optional[int] = None) -> pools.ProcessPool: """Returns a pathos.pools.ProcessPool instance. Split out for ease of unittesting since pathos can still run into pickling issues with MagicMocks used in tests. Args: nodes: How many processes processes to spawn in the process pool. Returns: A pathos.pools.ProcessPool instance. """ return pools.ProcessPool(nodes=nodes) @contextlib.contextmanager def GetProcessPoolContext( nodes: Optional[int] = None) -> Generator[pools.ProcessPool, None, None]: try: pool = GetProcessPool(nodes) yield pool finally: pool.close() pool.join()