def task_z(): print("task_z is starting") yield None yield None yield fibra.Return(3) yield fibra.Return(4) print("I should not get here.")
def collect_headers(self): headers = {} while True: line = yield self.transport.recv_line() if line == "": break i = line.index(":") k, v = line[:i].lower(), line[i + 1:] headers[k] = v yield fibra.Return(headers)
def recv(self): top = yield self.transport.recv_line() headers = yield self.collect_headers() try: size = int(headers.get('content-length', "")) except (ValueError): body = "" else: body = yield self.transport.recv(size) yield fibra.Return((top, headers, body))
def request(self, name, args, kw): headers = {} body = args, kw request_id = headers["request-id"] = str(self.request_id) headers['method'] = name self.request_id += 1 task = yield fibra.Self() self.requests[request_id] = time.time(), task yield self.send('request', headers, body) response = yield fibra.Suspend() yield fibra.Return(response)
def connect(address, connection_class, retry=0): """ This tasks connects to a server. """ transport = None sleep = 1.0 while transport is None: try: transport = yield fibra.net.connect(address) except (socket.error): if retry is not None: retry -= 1 if retry < 0: raise else: print('Cannot connect to', address, 'retrying...') yield sleep sleep *= 1.5 if sleep > 60: sleep = 60 yield fibra.Return(connection_class(transport))
def sub_task(x): if x < 5: yield fibra.Return(x**x) else: raise ValueError("x must be < 5")