Files
ray-project--ray/python/ray/data/_internal/progress/__init__.py
T
2026-07-13 13:17:40 +08:00

98 lines
3.5 KiB
Python

import logging
import sys
import typing
import ray
from ray.util.debug import log_once
if typing.TYPE_CHECKING:
from ray.data._internal.execution.streaming_executor_state import Topology
from ray.data._internal.progress.base_progress import BaseExecutionProgressManager
from ray.data.context import DataContext
logger = logging.getLogger(__name__)
def get_progress_manager(
ctx: "DataContext", dataset_id: str, topology: "Topology", verbose_progress: bool
) -> "BaseExecutionProgressManager":
"""Obtain the appropriate progress manager for the given DataContext."""
show_op_progress = ctx.enable_operator_progress_bars
if not ctx.enable_progress_bars:
from ray.data._internal.progress.base_progress import (
NoopExecutionProgressManager,
)
if log_once("ray_data_progress_manager_disabled"):
logger.warning(
"Progress bars disabled. To enable, set "
"`ray.data.DataContext.get_current()."
"enable_progress_bars = True`."
)
return NoopExecutionProgressManager(
dataset_id, topology, show_op_progress, verbose_progress
)
if not show_op_progress:
if log_once("ray_data_progress_manager_global"):
logger.warning(
"Progress bars for operators disabled. To enable, "
"set `ray.data.DataContext.get_current()."
"enable_operator_progress_bars = True`."
)
rich_enabled = ctx.enable_rich_progress_bars
use_ray_tqdm = ctx.use_ray_tqdm
worker = ray._private.worker
in_ray_worker = worker.global_worker.mode == worker.WORKER_MODE
if not sys.stdout.isatty() and not (use_ray_tqdm and in_ray_worker):
from ray.data._internal.progress.logging_progress import (
LoggingExecutionProgressManager,
)
if log_once("ray_data_logging_progress_activated"):
logger.info(
"Progress will be logged because stdout is a non-interactive terminal."
)
return LoggingExecutionProgressManager(
dataset_id, topology, show_op_progress, verbose_progress
)
if not rich_enabled or use_ray_tqdm:
from ray.data._internal.progress.tqdm_progress import (
TqdmExecutionProgressManager,
)
if log_once("ray_data_rich_progress_disabled"):
logger.info(
"[dataset]: A new progress UI is available. To enable, "
"set `ray.data.DataContext.get_current()."
"enable_rich_progress_bars = True` and `ray.data."
"DataContext.get_current().use_ray_tqdm = False`."
)
return TqdmExecutionProgressManager(
dataset_id, topology, show_op_progress, verbose_progress
)
else:
try:
from ray.data._internal.progress.rich_progress import (
RichExecutionProgressManager,
)
return RichExecutionProgressManager(
dataset_id, topology, show_op_progress, verbose_progress
)
except ImportError:
from ray.data._internal.progress.base_progress import (
NoopExecutionProgressManager,
)
logger.warning(
"[dataset]: Run `pip install rich` to enable progress reporting."
)
return NoopExecutionProgressManager(
dataset_id, topology, show_op_progress, verbose_progress
)