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])
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)
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)
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)
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)
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()
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)
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)
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()
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)
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()
def receive(): curr = maybe_wrap(core.getcurrent()) return curr.receive()
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)
def self(): return core.getcurrent()
def __init__(self): self.task = getcurrent() self.uv = uv_server() self.sched = get_scheduler() self.c = channel()
def flush(): curr = maybe_wrap(core.getcurrent()) curr.flush()