Exemple #1
0
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.")
Exemple #2
0
 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)
Exemple #3
0
 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))
Exemple #4
0
 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)
Exemple #5
0
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))
Exemple #6
0
def sub_task(x):
    if x < 5:
        yield fibra.Return(x**x)
    else:
        raise ValueError("x must be < 5")