예제 #1
0
 def __init__(
     self,
     *,
     name: str,
     modules: List[Module],
     dependent_modules: List[Module],
     dependent_modules_nonregular: List[Module],
     replicas: int = 1,
     state_type: StateType = True,
     hooks: Optional[List[Callable]] = None,
     options={},
 ):
     self.name = name
     self._modules = modules
     self._state_type = state_type
     self.dependencies = set([m.group for m in dependent_modules])
     self.module_dependencies = set([m.name for m in dependent_modules])
     self.dependencies_nonregular = set(
         [m.group for m in dependent_modules_nonregular])
     self.module_dependencies_nonregular = set(
         [m.name for m in dependent_modules_nonregular])
     self.pool = ParallelActorPool([
         Actor.options(**options).remote(
             name=name,
             index=i if replicas > 1 else None,
             state_type=state_type,
             modules=modules,
         ) for i in range(replicas)
     ])
     self._logger = None
     self._hooks = hooks
 async def test_should_run(self, runs, actors, ray_context):
     pool = ParallelActorPool([
         MultiplyActor.remote()
         for _ in range(actors)
     ])
     await asyncio.gather(*[
         pool.run(data=0, delay=0.0001)
         for _ in range(runs)
     ])
 async def test_should_process_correctly(self, score, runs, factor, actors, ray_context):
     pool = ParallelActorPool([
         MultiplyActor.remote(factor)
         for _ in range(actors)
     ])
     results = await asyncio.gather(*[
         pool.run(data=1, delay=0.0001)
         for _ in range(runs)
     ])
     assert sum(results) == score
예제 #4
0
class GroupRuntime:
    def __init__(
        self,
        *,
        name: str,
        modules: List[Module],
        dependent_modules: List[Module],
        dependent_modules_nonregular: List[Module],
        replicas: int = 1,
        state_type: StateType = True,
        options={},
    ):
        self.name = name
        self._modules = modules
        self._state_type = state_type
        self.dependencies = set([m.group for m in dependent_modules])
        self.module_dependencies = set([m.name for m in dependent_modules])
        self.dependencies_nonregular = set(
            [m.group for m in dependent_modules_nonregular])
        self.module_dependencies_nonregular = set(
            [m.name for m in dependent_modules_nonregular])
        self.pool = ParallelActorPool([
            Actor.options(**options).remote(name, state_type, modules)
            for _ in range(replicas)
        ])

    @property
    def modules(self) -> List[Module]:
        return self._modules

    @property
    def is_replicated(self) -> bool:
        return self.pool.replicas > 1

    @property
    def state_type(self) -> bool:
        return self._state_type

    def fulfills(self, names: Iterable[str]) -> bool:
        return set(names).issuperset(self.module_dependencies)

    async def bootstrap(self):
        await self.pool.bootstrap()

    async def run(self, job_id: UUID, request, results, is_regular_runtime):
        return asyncio.ensure_future(
            self.pool.run(job_id=job_id,
                          request=request,
                          results=results,
                          is_regular_runtime=is_regular_runtime))

    async def teardown(self):
        await self.pool.teardown()
예제 #5
0
 def __init__(
     self,
     *,
     name: str,
     modules: List[Module],
     dependent_modules: List[Module],
     dependent_modules_nonregular: List[Module],
     replicas: int = 1,
     state_type: StateType = True,
     options={},
 ):
     self.name = name
     self._modules = modules
     self._state_type = state_type
     self.dependencies = set([m.group for m in dependent_modules])
     self.module_dependencies = set([m.name for m in dependent_modules])
     self.dependencies_nonregular = set(
         [m.group for m in dependent_modules_nonregular])
     self.module_dependencies_nonregular = set(
         [m.name for m in dependent_modules_nonregular])
     self.pool = ParallelActorPool([
         Actor.options(**options).remote(name, state_type, modules)
         for _ in range(replicas)
     ])
 async def test_can_create(self, actors, ray_context):
     pool = ParallelActorPool([
         MultiplyActor.remote()
         for _ in range(actors)
     ])
     assert pool.replicas == actors