12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- import time
- import ray
- from ray.util.metrics import Counter, Gauge, Histogram
- ray.init(_metrics_export_port=8080)
- @ray.remote
- class MyActor:
- def __init__(self, name):
- self._curr_count = 0
- self.counter = Counter(
- "num_requests",
- description="Number of requests processed by the actor.",
- tag_keys=("actor_name", ))
- self.counter.set_default_tags({"actor_name": name})
- self.gauge = Gauge(
- "curr_count",
- description="Current count held by the actor. Goes up and down.",
- tag_keys=("actor_name", ))
- self.gauge.set_default_tags({"actor_name": name})
- self.histogram = Histogram(
- "request_latency",
- description="Latencies of requests in ms.",
- boundaries=[0.1, 1],
- tag_keys=("actor_name", ))
- self.histogram.set_default_tags({"actor_name": name})
- def process_request(self, num):
- start = time.time()
- self._curr_count += num
- # Increment the total request count.
- self.counter.inc()
- # Update the gauge to the new value.
- self.gauge.set(self._curr_count)
- # Record the latency for this request in ms.
- self.histogram.observe(1000 * (time.time() - start))
- return self._curr_count
- print("Starting actor.")
- my_actor = MyActor.remote("my_actor")
- print("Calling actor.")
- my_actor.process_request.remote(-10)
- print("Calling actor.")
- my_actor.process_request.remote(5)
- print("Metrics should be exported.")
- print("See http://localhost:8080 (this may take a few seconds to load).")
- # Sleep so we can look at the metrics before exiting.
- time.sleep(30)
- print("Exiting!")
|