mirror of
https://github.com/wassname/ray.git
synced 2026-07-13 05:16:56 +08:00
Printing messages to stderr (#2312)
Move core python code onto logging module. Addressing #1884.
This commit is contained in:
+37
-25
@@ -3,6 +3,7 @@ from __future__ import division
|
||||
from __future__ import print_function
|
||||
|
||||
import binascii
|
||||
import logging
|
||||
import json
|
||||
import os
|
||||
import random
|
||||
@@ -27,6 +28,12 @@ import ray.global_scheduler as global_scheduler
|
||||
import ray.local_scheduler
|
||||
import ray.plasma
|
||||
|
||||
logger = logging.getLogger("ray")
|
||||
logger.setLevel(logging.INFO)
|
||||
ch = logging.StreamHandler(sys.stderr)
|
||||
ch.setLevel(logging.INFO)
|
||||
logger.addHandler(ch)
|
||||
|
||||
PROCESS_TYPE_MONITOR = "monitor"
|
||||
PROCESS_TYPE_LOG_MONITOR = "log_monitor"
|
||||
PROCESS_TYPE_WORKER = "worker"
|
||||
@@ -178,7 +185,7 @@ def cleanup():
|
||||
# Reset the list of processes of this type.
|
||||
all_processes[process_type] = []
|
||||
if not successfully_shut_down:
|
||||
print("Ray did not shut down properly.")
|
||||
logger.warning("Ray did not shut down properly.")
|
||||
|
||||
|
||||
def all_processes_alive(exclude=[]):
|
||||
@@ -193,7 +200,8 @@ def all_processes_alive(exclude=[]):
|
||||
# alive.
|
||||
processes_alive = [p.poll() is None for p in processes]
|
||||
if (not all(processes_alive) and process_type not in exclude):
|
||||
print("A process of type {} has died.".format(process_type))
|
||||
logger.warning(
|
||||
"A process of type {} has died.".format(process_type))
|
||||
return False
|
||||
return True
|
||||
|
||||
@@ -303,13 +311,14 @@ def wait_for_redis_to_start(redis_ip_address, redis_port, num_retries=5):
|
||||
while counter < num_retries:
|
||||
try:
|
||||
# Run some random command and see if it worked.
|
||||
print("Waiting for redis server at {}:{} to respond...".format(
|
||||
redis_ip_address, redis_port))
|
||||
logger.info(
|
||||
"Waiting for redis server at {}:{} to respond...".format(
|
||||
redis_ip_address, redis_port))
|
||||
redis_client.client_list()
|
||||
except redis.ConnectionError as e:
|
||||
# Wait a little bit.
|
||||
time.sleep(1)
|
||||
print("Failed to connect to the redis server, retrying.")
|
||||
logger.info("Failed to connect to the redis server, retrying.")
|
||||
counter += 1
|
||||
else:
|
||||
break
|
||||
@@ -393,7 +402,7 @@ def check_version_info(redis_client):
|
||||
if version_info[:2] != true_version_info[:2]:
|
||||
raise Exception(error_message)
|
||||
else:
|
||||
print(error_message)
|
||||
logger.warning(error_message)
|
||||
|
||||
|
||||
def start_redis(node_ip_address,
|
||||
@@ -601,7 +610,7 @@ def _start_redis_instance(node_ip_address="127.0.0.1",
|
||||
|
||||
while counter < num_retries:
|
||||
if counter > 0:
|
||||
print("Redis failed to start, retrying now.")
|
||||
logger.warning("Redis failed to start, retrying now.")
|
||||
command = [executable, "--port",
|
||||
str(port), "--loglevel", "warning"] + load_module_args
|
||||
p = subprocess.Popen(command, stdout=stdout_file, stderr=stderr_file)
|
||||
@@ -786,16 +795,16 @@ def start_ui(redis_address, stdout_file=None, stderr_file=None, cleanup=True):
|
||||
stdout=stdout_file,
|
||||
stderr=stderr_file)
|
||||
except Exception:
|
||||
print("Failed to start the UI, you may need to run "
|
||||
"'pip install jupyter'.")
|
||||
logger.warning("Failed to start the UI, you may need to run "
|
||||
"'pip install jupyter'.")
|
||||
else:
|
||||
if cleanup:
|
||||
all_processes[PROCESS_TYPE_WEB_UI].append(ui_process)
|
||||
webui_url = ("http://localhost:{}/notebooks/ray_ui{}.ipynb?token={}"
|
||||
.format(port, random_ui_id, token))
|
||||
print("\n" + "=" * 70)
|
||||
print("View the web UI at {}".format(webui_url))
|
||||
print("=" * 70 + "\n")
|
||||
logger.info("\n" + "=" * 70)
|
||||
logger.info("View the web UI at {}".format(webui_url))
|
||||
logger.info("=" * 70 + "\n")
|
||||
return webui_url
|
||||
|
||||
|
||||
@@ -846,8 +855,8 @@ def check_and_update_resources(resources, use_raylet):
|
||||
|
||||
if (use_raylet and
|
||||
resource_quantity > ray.ray_constants.MAX_RESOURCE_QUANTITY):
|
||||
raise ValueError("Resource quantities must be at most {}."
|
||||
.format(ray.ray_constants.MAX_RESOURCE_QUANTITY))
|
||||
raise ValueError("Resource quantities must be at most {}.".format(
|
||||
ray.ray_constants.MAX_RESOURCE_QUANTITY))
|
||||
|
||||
return resources
|
||||
|
||||
@@ -892,8 +901,8 @@ def start_local_scheduler(redis_address,
|
||||
"""
|
||||
resources = check_and_update_resources(resources, False)
|
||||
|
||||
print("Starting local scheduler with the following resources: {}."
|
||||
.format(resources))
|
||||
logger.info("Starting local scheduler with the following resources: {}."
|
||||
.format(resources))
|
||||
local_scheduler_name, p = ray.local_scheduler.start_local_scheduler(
|
||||
plasma_store_name,
|
||||
plasma_manager_name,
|
||||
@@ -1049,12 +1058,13 @@ def start_objstore(node_ip_address,
|
||||
# blocks.
|
||||
shm_avail = shm_fs_stats.f_bsize * shm_fs_stats.f_bavail
|
||||
if objstore_memory > shm_avail:
|
||||
print("Warning: Reducing object store memory because "
|
||||
"/dev/shm has only {} bytes available. You may be "
|
||||
"able to free up space by deleting files in "
|
||||
"/dev/shm. If you are inside a Docker container, "
|
||||
"you may need to pass an argument with the flag "
|
||||
"'--shm-size' to 'docker run'.".format(shm_avail))
|
||||
logger.warning(
|
||||
"Warning: Reducing object store memory because "
|
||||
"/dev/shm has only {} bytes available. You may be "
|
||||
"able to free up space by deleting files in "
|
||||
"/dev/shm. If you are inside a Docker container, "
|
||||
"you may need to pass an argument with the flag "
|
||||
"'--shm-size' to 'docker run'.".format(shm_avail))
|
||||
objstore_memory = int(shm_avail * 0.8)
|
||||
finally:
|
||||
os.close(shm_fd)
|
||||
@@ -1295,7 +1305,8 @@ def start_ray_processes(address_info=None,
|
||||
A dictionary of the address information for the processes that were
|
||||
started.
|
||||
"""
|
||||
print("Process STDOUT and STDERR is being redirected to /tmp/raylogs/.")
|
||||
logger.info(
|
||||
"Process STDOUT and STDERR is being redirected to /tmp/raylogs/.")
|
||||
|
||||
if resources is None:
|
||||
resources = {}
|
||||
@@ -1712,8 +1723,9 @@ def try_to_create_directory(directory_path):
|
||||
except OSError as e:
|
||||
if e.errno != os.errno.EEXIST:
|
||||
raise e
|
||||
print("Attempted to create '{}', but the directory already "
|
||||
"exists.".format(directory_path))
|
||||
logger.warning(
|
||||
"Attempted to create '{}', but the directory already "
|
||||
"exists.".format(directory_path))
|
||||
# Change the log directory permissions so others can use it. This is
|
||||
# important when multiple people are using the same machine.
|
||||
os.chmod(directory_path, 0o0777)
|
||||
|
||||
Reference in New Issue
Block a user