예제 #1
0
 def testResilience(self):
     try:
         token = id(self)
         q = Queue()
         def callback(value, token):
             q.append((value, token))
         port = 6000
         host = ('localhost', port)
         p = launch_echoserver(port)
         coio.sleep(1)
         messenger = Messenger(host, reconnect_max_interval=0.1)
         messenger.connect()
         messenger.send('1', token, callback)
         assert q.popleft() == ('1', token)
         os.kill(p.pid, signal.SIGKILL)
         messenger.send('2', token, callback)
         coio.sleep(1)
         messenger.send('3', token, callback)
         assert q.popleft() == (None, token)
         assert q.popleft() == (None, token)
         p = launch_echoserver(port)
         coio.sleep(1)
         messenger.send('4', token, callback)
         assert q.popleft() == ('4', token)
         messenger.close()
         coio.sleep(1)
     finally:
         os.kill(p.pid, signal.SIGKILL)
예제 #2
0
def main(ports, instances, count, size, handshake=None):
    hosts = [('localhost', port) for port in ports]
    message_count = instances * count * len(hosts)
    data_size = message_count * size
    total_data_size = 2 * data_size
    messengers = []
    try:
        start_time = time.time()
        tasklets = []
        finish_queue = Queue()
        for i in xrange(instances):
            messengers = [(id(host), Messenger(host, handshake=handshake))
                          for host in hosts]
            for token, messenger in messengers:
                messenger.connect()
            coio.stackless.schedule()
            tasklets.append(
                coio.stackless.tasklet(invoke)(messengers, count, size,
                                               finish_queue))
        for i in xrange(instances):
            finish_queue.pop()
        end_time = time.time()
        elapsed_time = end_time - start_time
        logging.info('time: %.2f seconds', elapsed_time)
        logging.info('%.2f messages/s' % (float(message_count) / elapsed_time))
        logging.info('%.2f MB data' % (float(total_data_size) / (1024 * 1024)))
        logging.info('%.2f MB/s' % (float(total_data_size) /
                                    (1024 * 1024 * elapsed_time)))
    finally:
        for token, messenger in messengers:
            messenger.close()
예제 #3
0
    def handle_connection(self, c, address):
        logging.info('New connection from %s:%s' % address)
        try:
            if self.handshake:
                expected_challenge, response = self.handshake
                logging.debug('Awaiting challenge.')
                challenge = c.recv()
                logging.debug('Got challenge: "%s"', challenge)
                if challenge == expected_challenge:
                    logging.debug('Correct challenge, sending response: "%s"', response)
                    c.send(response)
                    c.flush()
                else:
                    logging.warning('Failed handshake!')
                    logging.warning('Expected challenge: %s', expected_challenge)
                    logging.warning('Actual challenge: %s', challenge)
                    return

            q = Queue()
            f = Queue()
            coio.stackless.tasklet(self.sender)(q, c, f)
            coio.stackless.tasklet(self.receiver)(q, c, f)
            f.popleft()
            f.popleft()
        except DisconnectedException:
            logging.warning('Client disconnected')
        finally:
            try:
                c.close()
                logging.info('Connection closed')
            except DisconnectedException:
                pass
def main(ports, instances, count, size, handshake=None):
    hosts = [('localhost', port) for port in ports]
    message_count = instances * count * len(hosts)
    data_size = message_count * size
    total_data_size = 2 * data_size
    messengers = []
    try:
        start_time = time.time()
        tasklets = []
        finish_queue = Queue()
        for i in xrange(instances):
            messengers = [(id(host), Messenger(host, handshake=handshake)) for host in hosts]
            for token, messenger in messengers:
                messenger.connect()
            coio.stackless.schedule()
            tasklets.append(coio.stackless.tasklet(invoke)(messengers, count, size, finish_queue))
        for i in xrange(instances):
            finish_queue.pop()
        end_time = time.time()
        elapsed_time = end_time - start_time
        logging.info('time: %.2f seconds', elapsed_time)
        logging.info('%.2f messages/s' % (float(message_count) / elapsed_time))
        logging.info('%.2f MB data' % (float(total_data_size) / (1024*1024)))
        logging.info('%.2f MB/s' % (float(total_data_size) / (1024*1024 * elapsed_time)))
    finally:
        for token, messenger in messengers:
            messenger.close()
예제 #5
0
    def testResilience(self):
        try:
            token = id(self)
            q = Queue()

            def callback(value, token):
                q.append((value, token))

            port = 6000
            host = ('localhost', port)
            p = launch_echoserver(port)
            coio.sleep(1)
            messenger = Messenger(host, reconnect_max_interval=0.1)
            messenger.connect()
            messenger.send('1', token, callback)
            assert q.popleft() == ('1', token)
            os.kill(p.pid, signal.SIGKILL)
            messenger.send('2', token, callback)
            coio.sleep(1)
            messenger.send('3', token, callback)
            assert q.popleft() == (None, token)
            assert q.popleft() == (None, token)
            p = launch_echoserver(port)
            coio.sleep(1)
            messenger.send('4', token, callback)
            assert q.popleft() == ('4', token)
            messenger.close()
            coio.sleep(1)
        finally:
            os.kill(p.pid, signal.SIGKILL)
def main():
    s = coio.nbsocket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 5555))
    c = Channel(s)
    N = 200000
    M = 16
    message = '.' * M
    byte_count = len(message) * N
    f = Queue()
    coio.stackless.tasklet(rawsocket_echoclient_core.sender)(c, message, N, f)
    coio.stackless.tasklet(rawsocket_echoclient_core.receiver)(c, N, f)
    start_time = timer()
    f.pop()
    f.pop()
    end_time = timer()
    diff_time = end_time - start_time
    print 'Transmission time: %fs' % diff_time
    print '%.2f messages/s, %.2f MB/s' % (float(N*2) / diff_time, (float(byte_count*2) / 2**20) / diff_time)
예제 #7
0
def main():
    s = coio.nbsocket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('127.0.0.1', 5555))
    c = Channel(s)
    N = 200000
    M = 16
    message = '.' * M
    byte_count = len(message) * N
    f = Queue()
    coio.stackless.tasklet(rawsocket_echoclient_core.sender)(c, message, N, f)
    coio.stackless.tasklet(rawsocket_echoclient_core.receiver)(c, N, f)
    start_time = timer()
    f.pop()
    f.pop()
    end_time = timer()
    diff_time = end_time - start_time
    print 'Transmission time: %fs' % diff_time
    print '%.2f messages/s, %.2f MB/s' % (float(N * 2) / diff_time,
                                          (float(byte_count * 2) / 2**20) /
                                          diff_time)