Skip to content

Commit c436078

Browse files
authored
Merge pull request #926 from mlco2/copilot/fix-925
Fix: Disable scheduler warning when scheduler is stopped
2 parents de3df56 + 2406512 commit c436078

2 files changed

Lines changed: 89 additions & 1 deletion

File tree

codecarbon/emissions_tracker.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@ def _measure_power_and_energy(self) -> None:
843843
raise e
844844

845845
warning_duration = self._measure_power_secs * 3
846-
if last_duration > warning_duration:
846+
if last_duration > warning_duration and not self._scheduler._stopped:
847847
warn_msg = (
848848
"Background scheduler didn't run for a long period"
849849
+ " (%ds), results might be inaccurate"

tests/test_emissions_tracker.py

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,3 +520,91 @@ def test_carbon_tracker_offline_context_manager(
520520
self.assertEqual("United States", emissions_df["country_name"].values[0])
521521
self.assertEqual("USA", emissions_df["country_iso_code"].values[0])
522522
self.assertIsInstance(tracker.final_emissions, float)
523+
524+
@mock.patch("codecarbon.emissions_tracker.logger")
525+
def test_scheduler_warning_suppressed_when_stopped(
526+
self,
527+
mock_logger,
528+
mock_setup_intel_cli,
529+
mock_log_values,
530+
mocked_get_gpu_details,
531+
mocked_env_cloud_details,
532+
mocked_is_gpu_details_available,
533+
):
534+
"""Test that scheduler warning is suppressed when scheduler is stopped."""
535+
with EmissionsTracker(
536+
output_dir=self.temp_path,
537+
measure_power_secs=1, # Short interval for testing
538+
) as tracker:
539+
# Stop the scheduler to simulate task mode or manual stopping
540+
tracker._scheduler.stop()
541+
542+
# Artificially set last measured time to simulate long delay
543+
import time
544+
545+
tracker._last_measured_time = time.perf_counter() - 10 # 10 seconds ago
546+
547+
# Reset mock to clear any previous warning calls
548+
mock_logger.warning.reset_mock()
549+
550+
# Call _measure_power_and_energy directly - this would normally trigger warning
551+
tracker._measure_power_and_energy()
552+
553+
# Verify that if warning was called, it wasn't the scheduler warning
554+
if mock_logger.warning.called:
555+
for call in mock_logger.warning.call_args_list:
556+
args, kwargs = call
557+
if (
558+
args
559+
and "Background scheduler didn't run for a long period"
560+
in str(args[0])
561+
):
562+
self.fail(
563+
"Scheduler warning was called when it should have been suppressed"
564+
)
565+
566+
@mock.patch("codecarbon.emissions_tracker.logger")
567+
def test_scheduler_warning_shown_when_running(
568+
self,
569+
mock_logger,
570+
mock_setup_intel_cli,
571+
mock_log_values,
572+
mocked_get_gpu_details,
573+
mocked_env_cloud_details,
574+
mocked_is_gpu_details_available,
575+
):
576+
"""Test that scheduler warning is shown when scheduler is running but delayed."""
577+
with EmissionsTracker(
578+
output_dir=self.temp_path,
579+
measure_power_secs=1, # Short interval for testing
580+
) as tracker:
581+
# Ensure scheduler is running (default state)
582+
self.assertFalse(tracker._scheduler._stopped)
583+
584+
# Artificially set last measured time to simulate long delay
585+
import time
586+
587+
tracker._last_measured_time = time.perf_counter() - 10 # 10 seconds ago
588+
589+
# Reset mock to clear any previous warning calls
590+
mock_logger.warning.reset_mock()
591+
592+
# Call _measure_power_and_energy directly - this should trigger warning
593+
tracker._measure_power_and_energy()
594+
595+
# Verify warning was logged since scheduler should be running
596+
scheduler_warning_found = False
597+
if mock_logger.warning.called:
598+
for call in mock_logger.warning.call_args_list:
599+
args, kwargs = call
600+
if (
601+
args
602+
and "Background scheduler didn't run for a long period"
603+
in str(args[0])
604+
):
605+
scheduler_warning_found = True
606+
break
607+
608+
self.assertTrue(
609+
scheduler_warning_found, "Expected scheduler warning was not found"
610+
)

0 commit comments

Comments
 (0)