mirror of
https://github.com/wassname/ray.git
synced 2026-07-19 11:27:32 +08:00
Switch Python indentation from 2 spaces to 4 spaces. (#726)
* 4 space indentation for actor.py. * 4 space indentation for worker.py. * 4 space indentation for more files. * 4 space indentation for some test files. * Check indentation in Travis. * 4 space indentation for some rl files. * Fix failure test. * Fix multi_node_test. * 4 space indentation for more files. * 4 space indentation for remaining files. * Fixes.
This commit is contained in:
committed by
Philipp Moritz
parent
310ba82131
commit
e0867c8845
@@ -11,99 +11,99 @@ import numpy as np
|
||||
|
||||
@ray.remote(num_return_vals=2)
|
||||
def handle_int(a, b):
|
||||
return a + 1, b + 1
|
||||
return a + 1, b + 1
|
||||
|
||||
# Test timing
|
||||
|
||||
|
||||
@ray.remote
|
||||
def empty_function():
|
||||
pass
|
||||
pass
|
||||
|
||||
|
||||
@ray.remote
|
||||
def trivial_function():
|
||||
return 1
|
||||
return 1
|
||||
|
||||
# Test keyword arguments
|
||||
|
||||
|
||||
@ray.remote
|
||||
def keyword_fct1(a, b="hello"):
|
||||
return "{} {}".format(a, b)
|
||||
return "{} {}".format(a, b)
|
||||
|
||||
|
||||
@ray.remote
|
||||
def keyword_fct2(a="hello", b="world"):
|
||||
return "{} {}".format(a, b)
|
||||
return "{} {}".format(a, b)
|
||||
|
||||
|
||||
@ray.remote
|
||||
def keyword_fct3(a, b, c="hello", d="world"):
|
||||
return "{} {} {} {}".format(a, b, c, d)
|
||||
return "{} {} {} {}".format(a, b, c, d)
|
||||
|
||||
# Test variable numbers of arguments
|
||||
|
||||
|
||||
@ray.remote
|
||||
def varargs_fct1(*a):
|
||||
return " ".join(map(str, a))
|
||||
return " ".join(map(str, a))
|
||||
|
||||
|
||||
@ray.remote
|
||||
def varargs_fct2(a, *b):
|
||||
return " ".join(map(str, b))
|
||||
return " ".join(map(str, b))
|
||||
|
||||
|
||||
try:
|
||||
@ray.remote
|
||||
def kwargs_throw_exception(**c):
|
||||
return ()
|
||||
kwargs_exception_thrown = False
|
||||
@ray.remote
|
||||
def kwargs_throw_exception(**c):
|
||||
return ()
|
||||
kwargs_exception_thrown = False
|
||||
except:
|
||||
kwargs_exception_thrown = True
|
||||
kwargs_exception_thrown = True
|
||||
|
||||
try:
|
||||
@ray.remote
|
||||
def varargs_and_kwargs_throw_exception(a, b="hi", *c):
|
||||
return "{} {} {}".format(a, b, c)
|
||||
varargs_and_kwargs_exception_thrown = False
|
||||
@ray.remote
|
||||
def varargs_and_kwargs_throw_exception(a, b="hi", *c):
|
||||
return "{} {} {}".format(a, b, c)
|
||||
varargs_and_kwargs_exception_thrown = False
|
||||
except:
|
||||
varargs_and_kwargs_exception_thrown = True
|
||||
varargs_and_kwargs_exception_thrown = True
|
||||
|
||||
# test throwing an exception
|
||||
|
||||
|
||||
@ray.remote
|
||||
def throw_exception_fct1():
|
||||
raise Exception("Test function 1 intentionally failed.")
|
||||
raise Exception("Test function 1 intentionally failed.")
|
||||
|
||||
|
||||
@ray.remote
|
||||
def throw_exception_fct2():
|
||||
raise Exception("Test function 2 intentionally failed.")
|
||||
raise Exception("Test function 2 intentionally failed.")
|
||||
|
||||
|
||||
@ray.remote(num_return_vals=3)
|
||||
def throw_exception_fct3(x):
|
||||
raise Exception("Test function 3 intentionally failed.")
|
||||
raise Exception("Test function 3 intentionally failed.")
|
||||
|
||||
# test Python mode
|
||||
|
||||
|
||||
@ray.remote
|
||||
def python_mode_f():
|
||||
return np.array([0, 0])
|
||||
return np.array([0, 0])
|
||||
|
||||
|
||||
@ray.remote
|
||||
def python_mode_g(x):
|
||||
x[0] = 1
|
||||
return x
|
||||
x[0] = 1
|
||||
return x
|
||||
|
||||
# test no return values
|
||||
|
||||
|
||||
@ray.remote
|
||||
def no_op():
|
||||
pass
|
||||
pass
|
||||
|
||||
@@ -15,119 +15,124 @@ EVENT_KEY = "RAY_MULTI_NODE_TEST_KEY"
|
||||
|
||||
|
||||
def _wait_for_nodes_to_join(num_nodes, timeout=20):
|
||||
"""Wait until the nodes have joined the cluster.
|
||||
"""Wait until the nodes have joined the cluster.
|
||||
|
||||
This will wait until exactly num_nodes have joined the cluster and each node
|
||||
has a local scheduler and a plasma manager.
|
||||
This will wait until exactly num_nodes have joined the cluster and each
|
||||
node has a local scheduler and a plasma manager.
|
||||
|
||||
Args:
|
||||
num_nodes: The number of nodes to wait for.
|
||||
timeout: The amount of time in seconds to wait before failing.
|
||||
Args:
|
||||
num_nodes: The number of nodes to wait for.
|
||||
timeout: The amount of time in seconds to wait before failing.
|
||||
|
||||
Raises:
|
||||
Exception: An exception is raised if too many nodes join the cluster or if
|
||||
the timeout expires while we are waiting.
|
||||
"""
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < timeout:
|
||||
client_table = ray.global_state.client_table()
|
||||
num_ready_nodes = len(client_table)
|
||||
if num_ready_nodes == num_nodes:
|
||||
ready = True
|
||||
# Check that for each node, a local scheduler and a plasma manager are
|
||||
# present.
|
||||
for ip_address, clients in client_table.items():
|
||||
client_types = [client["ClientType"] for client in clients]
|
||||
if "local_scheduler" not in client_types:
|
||||
ready = False
|
||||
if "plasma_manager" not in client_types:
|
||||
ready = False
|
||||
if ready:
|
||||
return
|
||||
if num_ready_nodes > num_nodes:
|
||||
# Too many nodes have joined. Something must be wrong.
|
||||
raise Exception("{} nodes have joined the cluster, but we were "
|
||||
"expecting {} nodes.".format(num_ready_nodes, num_nodes))
|
||||
time.sleep(0.1)
|
||||
Raises:
|
||||
Exception: An exception is raised if too many nodes join the cluster or
|
||||
if the timeout expires while we are waiting.
|
||||
"""
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < timeout:
|
||||
client_table = ray.global_state.client_table()
|
||||
num_ready_nodes = len(client_table)
|
||||
if num_ready_nodes == num_nodes:
|
||||
ready = True
|
||||
# Check that for each node, a local scheduler and a plasma manager
|
||||
# are present.
|
||||
for ip_address, clients in client_table.items():
|
||||
client_types = [client["ClientType"] for client in clients]
|
||||
if "local_scheduler" not in client_types:
|
||||
ready = False
|
||||
if "plasma_manager" not in client_types:
|
||||
ready = False
|
||||
if ready:
|
||||
return
|
||||
if num_ready_nodes > num_nodes:
|
||||
# Too many nodes have joined. Something must be wrong.
|
||||
raise Exception("{} nodes have joined the cluster, but we were "
|
||||
"expecting {} nodes.".format(num_ready_nodes,
|
||||
num_nodes))
|
||||
time.sleep(0.1)
|
||||
|
||||
# If we get here then we timed out.
|
||||
raise Exception("Timed out while waiting for {} nodes to join. Only {} "
|
||||
"nodes have joined so far.".format(num_ready_nodes,
|
||||
num_nodes))
|
||||
# If we get here then we timed out.
|
||||
raise Exception("Timed out while waiting for {} nodes to join. Only {} "
|
||||
"nodes have joined so far.".format(num_ready_nodes,
|
||||
num_nodes))
|
||||
|
||||
|
||||
def _broadcast_event(event_name, redis_address, data=None):
|
||||
"""Broadcast an event.
|
||||
"""Broadcast an event.
|
||||
|
||||
This is used to synchronize drivers for the multi-node tests.
|
||||
This is used to synchronize drivers for the multi-node tests.
|
||||
|
||||
Args:
|
||||
event_name: The name of the event to wait for.
|
||||
redis_address: The address of the Redis server to use for synchronization.
|
||||
data: Extra data to include in the broadcast (this will be returned by the
|
||||
corresponding _wait_for_event call). This data must be json serializable.
|
||||
"""
|
||||
redis_host, redis_port = redis_address.split(":")
|
||||
redis_client = redis.StrictRedis(host=redis_host, port=int(redis_port))
|
||||
payload = json.dumps((event_name, data))
|
||||
redis_client.rpush(EVENT_KEY, payload)
|
||||
Args:
|
||||
event_name: The name of the event to wait for.
|
||||
redis_address: The address of the Redis server to use for
|
||||
synchronization.
|
||||
data: Extra data to include in the broadcast (this will be returned by
|
||||
the corresponding _wait_for_event call). This data must be json
|
||||
serializable.
|
||||
"""
|
||||
redis_host, redis_port = redis_address.split(":")
|
||||
redis_client = redis.StrictRedis(host=redis_host, port=int(redis_port))
|
||||
payload = json.dumps((event_name, data))
|
||||
redis_client.rpush(EVENT_KEY, payload)
|
||||
|
||||
|
||||
def _wait_for_event(event_name, redis_address, extra_buffer=0):
|
||||
"""Block until an event has been broadcast.
|
||||
"""Block until an event has been broadcast.
|
||||
|
||||
This is used to synchronize drivers for the multi-node tests.
|
||||
This is used to synchronize drivers for the multi-node tests.
|
||||
|
||||
Args:
|
||||
event_name: The name of the event to wait for.
|
||||
redis_address: The address of the Redis server to use for synchronization.
|
||||
extra_buffer: An amount of time in seconds to wait after the event.
|
||||
Args:
|
||||
event_name: The name of the event to wait for.
|
||||
redis_address: The address of the Redis server to use for
|
||||
synchronization.
|
||||
extra_buffer: An amount of time in seconds to wait after the event.
|
||||
|
||||
Returns:
|
||||
The data that was passed into the corresponding _broadcast_event call.
|
||||
"""
|
||||
redis_host, redis_port = redis_address.split(":")
|
||||
redis_client = redis.StrictRedis(host=redis_host, port=int(redis_port))
|
||||
while True:
|
||||
event_infos = redis_client.lrange(EVENT_KEY, 0, -1)
|
||||
events = dict()
|
||||
for event_info in event_infos:
|
||||
name, data = json.loads(event_info)
|
||||
if name in events:
|
||||
raise Exception("The same event {} was broadcast twice.".format(name))
|
||||
events[name] = data
|
||||
if event_name in events:
|
||||
# Potentially sleep a little longer and then return the event data.
|
||||
time.sleep(extra_buffer)
|
||||
return events[event_name]
|
||||
time.sleep(0.1)
|
||||
Returns:
|
||||
The data that was passed into the corresponding _broadcast_event call.
|
||||
"""
|
||||
redis_host, redis_port = redis_address.split(":")
|
||||
redis_client = redis.StrictRedis(host=redis_host, port=int(redis_port))
|
||||
while True:
|
||||
event_infos = redis_client.lrange(EVENT_KEY, 0, -1)
|
||||
events = dict()
|
||||
for event_info in event_infos:
|
||||
name, data = json.loads(event_info)
|
||||
if name in events:
|
||||
raise Exception("The same event {} was broadcast twice."
|
||||
.format(name))
|
||||
events[name] = data
|
||||
if event_name in events:
|
||||
# Potentially sleep a little longer and then return the event data.
|
||||
time.sleep(extra_buffer)
|
||||
return events[event_name]
|
||||
time.sleep(0.1)
|
||||
|
||||
|
||||
def _pid_alive(pid):
|
||||
"""Check if the process with this PID is alive or not.
|
||||
"""Check if the process with this PID is alive or not.
|
||||
|
||||
Args:
|
||||
pid: The pid to check.
|
||||
Args:
|
||||
pid: The pid to check.
|
||||
|
||||
Returns:
|
||||
This returns false if the process is dead or defunct. Otherwise, it returns
|
||||
true.
|
||||
"""
|
||||
try:
|
||||
os.kill(pid, 0)
|
||||
except OSError:
|
||||
return False
|
||||
else:
|
||||
if psutil.Process(pid).status() == psutil.STATUS_ZOMBIE:
|
||||
return False
|
||||
Returns:
|
||||
This returns false if the process is dead or defunct. Otherwise, it
|
||||
returns true.
|
||||
"""
|
||||
try:
|
||||
os.kill(pid, 0)
|
||||
except OSError:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
if psutil.Process(pid).status() == psutil.STATUS_ZOMBIE:
|
||||
return False
|
||||
else:
|
||||
return True
|
||||
|
||||
|
||||
def wait_for_pid_to_exit(pid, timeout=20):
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < timeout:
|
||||
if not _pid_alive(pid):
|
||||
return
|
||||
time.sleep(0.1)
|
||||
raise Exception("Timed out while waiting for process to exit.")
|
||||
start_time = time.time()
|
||||
while time.time() - start_time < timeout:
|
||||
if not _pid_alive(pid):
|
||||
return
|
||||
time.sleep(0.1)
|
||||
raise Exception("Timed out while waiting for process to exit.")
|
||||
|
||||
Reference in New Issue
Block a user