|
48 | 48 | fake_in_process_host,
|
49 | 49 | HostMesh,
|
50 | 50 | )
|
51 |
| -from monarch._src.actor.proc_mesh import _get_bootstrap_args, ProcMesh |
| 51 | +from monarch._src.actor.proc_mesh import ( |
| 52 | + _get_bootstrap_args, |
| 53 | + get_or_spawn_controller, |
| 54 | + ProcMesh, |
| 55 | +) |
52 | 56 | from monarch._src.actor.v1.host_mesh import (
|
53 | 57 | _bootstrap_cmd,
|
54 | 58 | fake_in_process_host as fake_in_process_host_v1,
|
@@ -1640,3 +1644,25 @@ def test_cuda_is_not_initialized_in_a_new_proc():
|
1640 | 1644 | pytest.skip("cannot find cuda")
|
1641 | 1645 | proc = this_host().spawn_procs().spawn("is_init", IsInit)
|
1642 | 1646 | assert not proc.is_cuda_initialized.call_one().get()
|
| 1647 | + |
| 1648 | + |
| 1649 | +class SpawningActorFromEndpointActor(Actor): |
| 1650 | + def __init__(self, root="None"): |
| 1651 | + self._root = root |
| 1652 | + |
| 1653 | + @endpoint |
| 1654 | + def return_root(self): |
| 1655 | + return self._root |
| 1656 | + |
| 1657 | + @endpoint |
| 1658 | + async def spawning_from_endpoint(self, name, root) -> None: |
| 1659 | + await get_or_spawn_controller(name, SpawningActorFromEndpointActor, root=root) |
| 1660 | + |
| 1661 | + |
| 1662 | +@pytest.mark.timeout(60) |
| 1663 | +def test_get_or_spawn_controller_inside_actor_endpoint(): |
| 1664 | + actor_1 = get_or_spawn_controller("actor_1", SpawningActorFromEndpointActor).get() |
| 1665 | + actor_1.spawning_from_endpoint.call_one("actor_2", root="actor_1").get() |
| 1666 | + actor_2 = get_or_spawn_controller("actor_2", SpawningActorFromEndpointActor).get() |
| 1667 | + # verify that actor_2 was spawned from actor_1 with the correct root |
| 1668 | + assert actor_2.return_root.call_one().get() == "actor_1" |
0 commit comments