63 lines
1.5 KiB
Python
63 lines
1.5 KiB
Python
"""
|
|
Test showing that memory can be drained from a memory recording as valid RRD files.
|
|
|
|
After running:
|
|
```bash
|
|
rerun *.rrd
|
|
```
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import queue
|
|
import threading
|
|
import time
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
import rerun as rr
|
|
import rerun.blueprint as rrb
|
|
|
|
if TYPE_CHECKING:
|
|
from collections.abc import Iterator
|
|
|
|
|
|
@rr.thread_local_stream("rerun_example_memory_drain")
|
|
def job(name: str) -> Iterator[tuple[str, int, bytes]]:
|
|
mem = rr.memory_recording()
|
|
|
|
blueprint = rrb.Blueprint(rrb.TextLogView(name="My Logs", origin="test"))
|
|
|
|
rr.send_blueprint(blueprint)
|
|
|
|
for i in range(5):
|
|
time.sleep(0.2)
|
|
rr.log("test", rr.TextLog(f"Job {name} Message {i}"))
|
|
|
|
print(f"YIELD {name} {i}")
|
|
yield (name, i, mem.drain_as_bytes())
|
|
|
|
|
|
def queue_results(generator: Iterator[Any], out_queue: queue.Queue[Any]) -> None:
|
|
for item in generator:
|
|
out_queue.put(item)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
results_queue: queue.Queue[tuple[str, int, bytes]] = queue.Queue()
|
|
|
|
threads = [
|
|
threading.Thread(target=queue_results, args=(job("A"), results_queue)),
|
|
threading.Thread(target=queue_results, args=(job("B"), results_queue)),
|
|
threading.Thread(target=queue_results, args=(job("C"), results_queue)),
|
|
]
|
|
for t in threads:
|
|
t.start()
|
|
for t in threads:
|
|
t.join()
|
|
|
|
while not results_queue.empty():
|
|
name, i, data = results_queue.get()
|
|
|
|
with open(f"output_{name}_{i}.rrd", "wb") as f:
|
|
f.write(data)
|