Ejemplo n.º 1
0
    def registered(self, ref=None):
        """ get an actor by it's ref """
        print(type(core.getcurrent()))
        if ref is None:
            try:
                ref = core.getcurrent().ref
            except AttributeError:
                return []


        print(ref)
        print(self._by_ref)

        if ref not in self._by_ref:
            return []
        print(self._by_ref[ref])
        return sorted(self._by_ref[ref])
Ejemplo n.º 2
0
    def spawn_link(cls, func, *args, **kwargs):
        curr = core.getcurrent()
        if not hasattr(curr, 'mailbox'):
            curr = cls.wrap(curr)

        if operator.indexOf(self.links, curr.ref) < 0:
            self.links.append(curr.ref)

        return cls.spawn(func, *args, **kwargs)
Ejemplo n.º 3
0
 def __setattr__(self, key, value):
     if key == '_d':
         self.__dict__[key] = value
         object.__setattr__(self, key, value)
     else:
         d = self._d
         curr = getcurrent()
         if not curr in d:
             d[curr] = self._local_attr()
         setattr(d[curr], key, value)
Ejemplo n.º 4
0
 def __setattr__(self, key, value):
     if key == '_d':
         self.__dict__[key] = value
         object.__setattr__(self, key, value)
     else:
         d = self._d
         curr = getcurrent()
         if not curr in d:
             d[curr] = self._local_attr()
         setattr(d[curr], key, value)
Ejemplo n.º 5
0
    def __init__(self, addr=('0.0.0.0', 0)):
        # listeners are all couroutines waiting for a connections
        self.listeners = deque()
        self.uv = uv_server()
        self.sched = get_scheduler()
        self.task = getcurrent()
        self.listening = False

        self.handler = self.HANDLER_CLASS(self.uv.loop)
        self.handler.bind(addr)
Ejemplo n.º 6
0
    def __init__(self, addr=('0.0.0.0', 0)):
        # listeners are all couroutines waiting for a connections
        self.listeners = deque()

        self.conns = {}
        self.uv = uv_server()
        self.task = getcurrent()
        self.listening = False
        self.handler = pyuv.UDP(self.uv.loop)
        self.handler.bind(addr)
Ejemplo n.º 7
0
    def __init__(self, addr=('0.0.0.0', 0)):
        # listeners are all couroutines waiting for a connections
        self.listeners = deque()
        self.uv = uv_server()
        self.sched = get_scheduler()
        self.task = getcurrent()
        self.listening = False

        self.handler = self.HANDLER_CLASS(self.uv.loop)
        self.handler.bind(addr)
Ejemplo n.º 8
0
def send(dest, msg):
    """ send a message to the destination """
    source = maybe_wrap(core.getcurrent())

    if isinstance(dest, six.string_types):
        dest = registry[dest]
    elif isinstance(dest, core.tasklet):
        dest = maybe_wrap(dest)

    mail = Message(source, dest, msg)
    mail.send()
Ejemplo n.º 9
0
def send_after(seconds, dest, msg):
    """ send a message after n seconds """

    if not seconds:
        return send(dest, msg)

    source = maybe_wrap(core.getcurrent())
    if isinstance(dest, six.string_types):
        dest = registry[dest]
    elif isinstance(dest, core.tasklet):
        dest = maybe_wrap(dest)

    mail = Message(source, dest, msg)
    mail.send_after(seconds)
Ejemplo n.º 10
0
    def __init__(self, addr=('0.0.0.0', 0), proto="tcp"):
        try:
            self.handler_class = UV_HANDLERS[proto]
        except KeyError:
            raise ValueError("type should be tcp, udp or unix")

        # listeners are all couroutines waiting for a connections
        self.listeners = deque()
        self.uv = uv_server()
        self.sched = get_scheduler()
        self.task = getcurrent()
        self.listening = False

        self.handler = self.handler_class(self.uv.loop)
        self.handler.bind(addr)
Ejemplo n.º 11
0
def idle():
    """ By using this function the current tasklet will be scheduled asap"""

    sched = core.get_scheduler()
    curr = core.getcurrent()
    def ready(now, h):
        curr.blocked = False
        sched.append(curr)
        core.schedule()

    t = timer.Timer(ready, 0.0001)
    t.start()

    curr.blocked = True
    core.schedule_remove()
Ejemplo n.º 12
0
def idle():
    """ By using this function the current tasklet will be scheduled asap"""

    sched = core.get_scheduler()
    curr = core.getcurrent()

    def ready(now, h):
        curr.blocked = False
        sched.append(curr)
        core.schedule()

    t = timer.Timer(ready, 0.0001)
    t.start()

    curr.blocked = True
    core.schedule_remove()
Ejemplo n.º 13
0
    def __init__(self, addr, *args, **kwargs):

        sock = None
        fd = None
        if "sock" in kwargs:
            # we passed a socket in the kwargs, just use it
            sock = kwargs['sock']
            fd = sock.fileno()
        elif isinstance(addr, int):
            # we are reusing a socket here
            fd = addr
            if "family" not in kwargs:
                family = socket.AF_INET
            else:
                family = kwargs['family']
            sock = socket.fromfd(fd, family, socket.SOCK_STREAM)
        else:
            # new socket
            addr = parse_address(addr)
            if is_ipv6(addr[0]):
                family = socket.AF_INET6
            else:
                family = socket.AF_INET

            sock = socket.socket(family, socket.SOCK_STREAM)
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

            nodelay = kwargs.get('nodelay', True)
            if family == socket.AF_INET and nodelay:
                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

            sock.bind(addr)
            sock.setblocking(0)
            fd = sock.fileno()

        self.sock = sock
        self.fd = fd
        self.addr = addr
        self.backlog = kwargs.get('backlog', 128)
        self.timeout = socket.getdefaulttimeout()
        self.uv = uv_server()
        self.poller = None
        self.listeners = deque()
        self.task = getcurrent()

        # start to listen
        self.sock.listen(self.backlog)
Ejemplo n.º 14
0
    def __init__(self, addr, *args, **kwargs):

        sock = None
        fd = None
        if "sock" in kwargs:
            # we passed a socket in the kwargs, just use it
            sock = kwargs['sock']
            fd = sock.fileno()
        elif isinstance(addr, int):
            # we are reusing a socket here
            fd = addr
            if "family" not in kwargs:
                family = socket.AF_INET
            else:
                family = kwargs['family']
            sock = socket.fromfd(fd, family, socket.SOCK_STREAM)
        else:
            # new socket
            addr = parse_address(addr)
            if is_ipv6(addr[0]):
                family = socket.AF_INET6
            else:
                family = socket.AF_INET

            sock = socket.socket(family, socket.SOCK_STREAM)
            sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

            nodelay = kwargs.get('nodelay', True)
            if family == socket.AF_INET and nodelay:
                sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)

            sock.bind(addr)
            sock.setblocking(0)
            fd = sock.fileno()

        self.sock = sock
        self.fd = fd
        self.addr = addr
        self.backlog = kwargs.get('backlog', 128)
        self.timeout = socket.getdefaulttimeout()
        self.uv = uv_server()
        self.poller = None
        self.listeners = deque()
        self.task = getcurrent()

        # start to listen
        self.sock.listen(self.backlog)
Ejemplo n.º 15
0
    def test_simple(self):
        rlist = []

        def f():
            rlist.append('f')

        def g():
            rlist.append('g')
            core.schedule()

        def main():
            rlist.append('m')
            cg = core.tasklet(g)()
            cf = core.tasklet(f)()
            core.run()
            rlist.append('m')

        main()

        assert core.getcurrent() is core.getmain()
        assert rlist == 'm g f m'.split()
Ejemplo n.º 16
0
    def test_simple(self):
        rlist = []

        def f():
            rlist.append('f')

        def g():
            rlist.append('g')
            core.schedule()

        def main():
            rlist.append('m')
            cg = core.tasklet(g)()
            cf = core.tasklet(f)()
            core.run()
            rlist.append('m')

        main()

        assert core.getcurrent() is core.getmain()
        assert rlist == 'm g f m'.split()
Ejemplo n.º 17
0
def receive():
    curr = maybe_wrap(core.getcurrent())
    return curr.receive()
Ejemplo n.º 18
0
 def __delattr__(self, key):
     d = self._d
     curr = getcurrent()
     if not curr in d or not hasattr(d[curr], key):
         raise AttributeError(key)
     delattr(d[curr], key)
Ejemplo n.º 19
0
def self():
    return core.getcurrent()
Ejemplo n.º 20
0
 def __delattr__(self, key):
     d = self._d
     curr = getcurrent()
     if not curr in d or not hasattr(d[curr], key):
         raise AttributeError(key)
     delattr(d[curr], key)
Ejemplo n.º 21
0
 def __init__(self):
     self.task = getcurrent()
     self.uv = uv_server()
     self.sched = get_scheduler()
     self.c = channel()
Ejemplo n.º 22
0
def flush():
    curr = maybe_wrap(core.getcurrent())
    curr.flush()
Ejemplo n.º 23
0
 def __init__(self):
     self.task = getcurrent()
     self.uv = uv_server()
     self.sched = get_scheduler()
     self.c = channel()