diff --git a/gprofiler/containers_client.py b/gprofiler/containers_client.py index 0492972ad..b8d42a62c 100644 --- a/gprofiler/containers_client.py +++ b/gprofiler/containers_client.py @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. # +from threading import Lock from typing import Dict, List, Optional, Set from granulate_utils.containers.client import ContainersClient @@ -25,11 +26,22 @@ logger = get_logger_adapter(__name__) +_containers_client: Optional[ContainersClient] = None +_containers_client_lock = Lock() + + +def get_containers_client() -> ContainersClient: + global _containers_client + with _containers_client_lock: + if _containers_client is None: + _containers_client = ContainersClient() + return _containers_client + class ContainerNamesClient: def __init__(self) -> None: try: - self._containers_client: Optional[ContainersClient] = ContainersClient() + self._containers_client: Optional[ContainersClient] = get_containers_client() logger.info(f"Discovered container runtimes: {self._containers_client.get_runtimes()}") except NoContainerRuntimesError: logger.warning( @@ -73,7 +85,8 @@ def get_container_name(self, pid: int) -> str: def _safely_get_process_container_name(self, pid: int) -> Optional[str]: try: try: - container_id = get_process_container_id(Process(pid)) + process = Process(pid) + container_id = get_process_container_id(process) if container_id is None: return None except NoSuchProcess: diff --git a/granulate-utils b/granulate-utils index 80a9dda7f..aadebc3a8 160000 --- a/granulate-utils +++ b/granulate-utils @@ -1 +1 @@ -Subproject commit 80a9dda7f8e2309b933d9c3f7a521bd0a0f8f3d5 +Subproject commit aadebc3a8c376ba612f4fb3b78f14d065c35a027