90 lines
1.8 KiB
Python
90 lines
1.8 KiB
Python
from ray import ray
|
|
from typing import Tuple
|
|
|
|
ray.connect("localhost:50051")
|
|
|
|
|
|
@ray.remote
|
|
class HelloActor:
|
|
def __init__(self):
|
|
self.count = 0
|
|
|
|
def say_hello(self, whom: str) -> Tuple[str, int]:
|
|
self.count += 1
|
|
return ("Hello " + whom, self.count)
|
|
|
|
|
|
actor = HelloActor.remote()
|
|
s, count = ray.get(actor.say_hello.remote("you"))
|
|
print(s, count)
|
|
assert s == "Hello you"
|
|
assert count == 1
|
|
s, count = ray.get(actor.say_hello.remote("world"))
|
|
print(s, count)
|
|
assert s == "Hello world"
|
|
assert count == 2
|
|
|
|
|
|
@ray.remote
|
|
def plus2(x):
|
|
return x + 2
|
|
|
|
|
|
@ray.remote
|
|
def fact(x):
|
|
print(x, type(fact))
|
|
if x <= 0:
|
|
return 1
|
|
# This hits the "nested tasks" issue
|
|
# https://github.com/ray-project/ray/issues/3644
|
|
# So we're on the right track!
|
|
return ray.get(fact.remote(x - 1)) * x
|
|
|
|
|
|
@ray.remote
|
|
def get_nodes():
|
|
return ray.nodes() # Can access the full Ray API in remote methods.
|
|
|
|
|
|
print("Cluster nodes", ray.get(get_nodes.remote()))
|
|
print(ray.nodes())
|
|
|
|
objectref = ray.put("hello world")
|
|
|
|
# `ClientObjectRef(...)`
|
|
print(objectref)
|
|
|
|
# `hello world`
|
|
print(ray.get(objectref))
|
|
|
|
ref2 = plus2.remote(234)
|
|
# `ClientObjectRef(...)`
|
|
print(ref2)
|
|
# `236`
|
|
print(ray.get(ref2))
|
|
|
|
ref3 = fact.remote(20)
|
|
# `ClientObjectRef(...)`
|
|
print(ref3)
|
|
# `2432902008176640000`
|
|
print(ray.get(ref3))
|
|
|
|
# Reuse the cached ClientRemoteFunc object
|
|
ref4 = fact.remote(5)
|
|
# `120`
|
|
print(ray.get(ref4))
|
|
|
|
ref5 = fact.remote(10)
|
|
|
|
print([ref2, ref3, ref4, ref5])
|
|
# should return ref2, ref3, ref4
|
|
res = ray.wait([ref5, ref2, ref3, ref4], num_returns=3)
|
|
print(res)
|
|
assert [ref2, ref3, ref4] == res[0]
|
|
assert [ref5] == res[1]
|
|
|
|
# should return ref2, ref3, ref4, ref5
|
|
res = ray.wait([ref2, ref3, ref4, ref5], num_returns=4)
|
|
print(res)
|
|
assert [ref2, ref3, ref4, ref5] == res[0]
|
|
assert [] == res[1]
|