diff --git a/batchgenerators/dataloading/multi_threaded_augmenter.py b/batchgenerators/dataloading/multi_threaded_augmenter.py index fcc3aac..855f0e0 100755 --- a/batchgenerators/dataloading/multi_threaded_augmenter.py +++ b/batchgenerators/dataloading/multi_threaded_augmenter.py @@ -25,6 +25,11 @@ from time import sleep, time from threadpoolctl import threadpool_limits + +# Library code must not log through the root logger: logger.debug() installs a +# handler on it, so an application's own records get echoed a second time. +logger = logging.getLogger(__name__) + from batchgenerators.dataloading.nondet_multi_threaded_augmenter import pin_memory_of_all_eligible_items_in_dict try: @@ -206,7 +211,7 @@ def __next__(self): if self._end_ctr == self.num_processes: self._end_ctr = 0 self._queue_ctr = 0 - logging.debug("MultiThreadedGenerator: finished data generation") + logger.debug("MultiThreadedGenerator: finished data generation") raise StopIteration item = self.__get_next_item() @@ -214,7 +219,7 @@ def __next__(self): return item except KeyboardInterrupt: - logging.error("MultiThreadedGenerator: caught exception: {}".format(sys.exc_info())) + logger.error("MultiThreadedGenerator: caught exception: {}".format(sys.exc_info())) self.abort_event.set() self._finish() raise KeyboardInterrupt @@ -225,7 +230,7 @@ def _start(self): self.abort_event.clear() self.pause_event.clear() - logging.debug("starting workers") + logger.debug("starting workers") self._queue_ctr = 0 self._end_ctr = 0 @@ -258,7 +263,7 @@ def _start(self): self.was_initialized = True else: - logging.debug("MultiThreadedGenerator Warning: start() has been called but it has already been " + logger.debug("MultiThreadedGenerator Warning: start() has been called but it has already been " "initialized previously") def _finish(self, timeout=10, force=False): @@ -303,7 +308,7 @@ def _finish(self, timeout=10, force=False): # feeder threads need pipe space to flush before the worker # process can fully exit; draining concurrently unblocks them. if len(self._processes) > 0: - logging.debug("MultiThreadedGenerator: shutting down workers...") + logger.debug("MultiThreadedGenerator: shutting down workers...") deadline = time() + timeout drain_tick = max(self.wait_time, 0.01) while time() < deadline and any(p.is_alive() for p in self._processes): @@ -348,7 +353,7 @@ def restart(self): self._start() def __del__(self): - logging.debug("MultiThreadedGenerator: destructor was called") + logger.debug("MultiThreadedGenerator: destructor was called") # Interpreter shutdown may have already torn down parts of # multiprocessing; take the fast path with a short timeout. self._finish(timeout=2, force=True) diff --git a/batchgenerators/dataloading/nondet_multi_threaded_augmenter.py b/batchgenerators/dataloading/nondet_multi_threaded_augmenter.py index de25629..f613264 100755 --- a/batchgenerators/dataloading/nondet_multi_threaded_augmenter.py +++ b/batchgenerators/dataloading/nondet_multi_threaded_augmenter.py @@ -29,6 +29,11 @@ from batchgenerators.dataloading.data_loader import DataLoader from threadpoolctl import threadpool_limits + +# Library code must not log through the root logger: logger.debug() installs a +# handler on it, so an application's own records get echoed a second time. +logger = logging.getLogger(__name__) + try: import torch except ImportError: @@ -229,7 +234,7 @@ def _start(self): self.abort_event = Event() self.pause_event = Event() - logging.debug("starting workers") + logger.debug("starting workers") if isinstance(self.generator, DataLoader): self.generator.was_initialized = False @@ -258,7 +263,7 @@ def _start(self): self.initialized = True else: - logging.debug("MultiThreadedGenerator Warning: start() has been called but workers are already running") + logger.debug("MultiThreadedGenerator Warning: start() has been called but workers are already running") def _finish(self, timeout=10, force=False): """Graceful shutdown — same pause-drain-exit handshake as MTA. @@ -332,7 +337,7 @@ def restart(self): self._start() def __del__(self): - logging.debug("MultiThreadedGenerator: destructor was called") + logger.debug("MultiThreadedGenerator: destructor was called") self._finish(timeout=2, force=True)