diff --git a/codecarbon/emissions_tracker.py b/codecarbon/emissions_tracker.py index bd9cfa84d..9d57f0307 100644 --- a/codecarbon/emissions_tracker.py +++ b/codecarbon/emissions_tracker.py @@ -302,7 +302,7 @@ def start(self) -> None: self._scheduler.start() @suppress(Exception) - def stop(self) -> Optional[float]: + def _stop(self, destroy: bool) -> Optional[float]: """ Stops tracking the experiment :return: CO2 emissions in kgs @@ -311,7 +311,10 @@ def stop(self) -> Optional[float]: logger.error("Need to first start the tracker") return None - self._scheduler.shutdown() + if destroy: + self._scheduler.shutdown() + else: + self._scheduler.pause() # Run to calculate the power used from last # scheduled measurement to shutdown @@ -328,6 +331,32 @@ def stop(self) -> Optional[float]: self.final_emissions = emissions_data.emissions return emissions_data.emissions + @suppress(Exception) + def pause(self): + """ + Temporarily halts tracking the experiment. + Logs intermediate experiment tracking results. + :return: CO2 emissions in kgs + """ + return self._stop(destroy=False) + + @suppress(Exception) + def resume(self): + """ + Resumes previously paused tracking + """ + logger.info("Restarting tracker") + self._last_measured_time = self._start_time = time.time() + self._scheduler.resume() + + @suppress(Exception) + def stop(self) -> Optional[float]: + """ + Stops tracking the experiment + :return: CO2 emissions in kgs + """ + return self._stop(destroy=True) + def _prepare_emissions_data(self, delta=False) -> EmissionsData: """ :delta: True to return only the delta comsumption since last call