Exemplo n.º 1
0
class ActorSystem(actors.internal.factory.ActorFactory):

    def __init__(self, system_dispatcher=None):
        """
        The actor system is responsible for creating, configuring and stopping actors and
        dispatchers.

        Normally, only one system per application should be created.

        :param system_dispatcher: Override the dispatcher used by the system. This also acts as the
            default dispatcher for new actors.
        :type system_dispatcher: :class:`Dispatcher`
        """
        self._system_dispatcher = Dispatcher(Executor()) \
            if system_dispatcher is None else system_dispatcher
        self._dead_letters = _DeadLetterRef()

        self._terminate_promise = Promise()

        class Guardian(Actor):
            def __init__(me):
                me._logger = logging.getLogger(__name__)

            def receive(me, message):
                me._logger.warning("User receive called. This should not be happen.")

            def post_stop(me):
                self._terminate_promise.complete(None)

        self._guardian = InternalRef(actors.internal.cell.Cell(Guardian,
            dispatcher=self._system_dispatcher, system=self, parent=None))
        self._guardian.send_system_message(Start)

        actors.internal.factory.ActorFactory.__init__(self, self, self._guardian)

    def terminate(self):
        self._guardian.send_system_message(Terminate)
        self._terminate_promise.future.get()

    @property
    def dead_letters(self):
        return self._dead_letters

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.terminate()
Exemplo n.º 2
0
    def actor_of(self, cls=None, behaviour=None, dispatcher=None):
        if cls:
            factory = cls
        elif behaviour:
            factory = _actor_from_behaviour(behaviour)
        else:
            raise ValueError()

        if dispatcher is None:
            dispatcher = self._system._system_dispatcher

        from actors.internal.cell import Cell
        cell = Cell(factory, dispatcher=dispatcher, system=self._system,
                         parent=self._supervisor)

        internal_ref = InternalRef(cell)
        self._supervisor.send_system_message(Supervise(internal_ref))
        internal_ref.send_system_message(Start)

        return ActorRef(cell)
Exemplo n.º 3
0
    def actor_of(self, cls=None, behaviour=None, dispatcher=None):
        if cls:
            factory = cls
        elif behaviour:
            factory = _actor_from_behaviour(behaviour)
        else:
            raise ValueError()

        if dispatcher is None:
            dispatcher = self._system._system_dispatcher

        from actors.internal.cell import Cell
        cell = Cell(factory,
                    dispatcher=dispatcher,
                    system=self._system,
                    parent=self._supervisor)

        internal_ref = InternalRef(cell)
        self._supervisor.send_system_message(Supervise(internal_ref))
        internal_ref.send_system_message(Start)

        return ActorRef(cell)