diff --git a/nb_conda_kernels/manager.py b/nb_conda_kernels/manager.py index 2be34f6..2bdb53e 100644 --- a/nb_conda_kernels/manager.py +++ b/nb_conda_kernels/manager.py @@ -6,6 +6,7 @@ import sys import time import glob +import psutil import os from os.path import join, split, dirname, basename, abspath @@ -138,6 +139,8 @@ def _conda_info(self): self._conda_info_cache = conda_info self._conda_info_cache_expiry = time.time() + CACHE_TIMEOUT + self.wait_for_child_processes_cleanup() + return self._conda_info_cache def _all_envs(self): @@ -390,3 +393,11 @@ def remove_kernel_spec(self, name): else: shutil.rmtree(spec_dir) return spec_dir + + def wait_for_child_processes_cleanup(self): + p = psutil.Process() + for c in p.children(): + try: + c.wait(timeout=0) + except psutil.TimeoutExpired: + pass diff --git a/requirements.txt b/requirements.txt index 54dd2c7..1bfe6b3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,6 +3,7 @@ jupyter_client r-irkernel requests flake8 +psutil pytest pytest-cov mock diff --git a/testbed/testenv1.yaml b/testbed/testenv1.yaml index 62fea6b..da0c2ac 100644 --- a/testbed/testenv1.yaml +++ b/testbed/testenv1.yaml @@ -3,4 +3,4 @@ dependencies: - backports.functools_lru_cache - r-irkernel - conda-forge::ipykernel - - python=2 + - python=3 diff --git a/tests/test_runner.py b/tests/test_runner.py index c2b0036..2b92747 100644 --- a/tests/test_runner.py +++ b/tests/test_runner.py @@ -11,7 +11,6 @@ from nb_conda_kernels.discovery import CondaKernelProvider from nb_conda_kernels.manager import RUNNER_COMMAND -from jupyter_client.blocking.client import Empty START_TIMEOUT = 10 CMD_TIMEOUT = 3