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()
def testPerformance(self): token = id(self) message_length = 1024 N = 10000 batch_size = 100 collector = Collector(batch_size) l = 0 port = 6001 host = ('localhost', port) p = launch_echoserver(port) bytecount = 0 try: sent_messages = deque() coio.sleep(1) messenger = Messenger(host) messenger.connect() message_buffer = ''.join('%d' % (i % 10) for i in xrange(N + message_length * 2)) i = 0 start_time = timer() for i in xrange(N): if message_length > 4096: message = buffer(message_buffer, i, message_length) else: message = message_buffer[i:i + message_length] bytecount += len(message) messenger.send(message, token, collector) sent_messages.append((message, token)) l += 1 if l % batch_size == 0: replies = collector.collect() for i in xrange(len(replies)): rm, rt = replies[i] sm, st = sent_messages.popleft() if type(sm) is buffer: rm = buffer(rm) if rm != sm: print 'i: ', i assert False collector = Collector(batch_size) end_time = timer() elapsed_time = end_time - start_time print 'Transmitted %d messages with a size of %d bytes' % ( N, message_length) print 'Transmission time (with validation): %fs' % elapsed_time print '%.2f requests+replies/s, %.2f MB/s' % ( float(N * 2) / elapsed_time, (float(bytecount * 2) / 2**20) / elapsed_time) messenger.close() finally: os.kill(p.pid, signal.SIGKILL)
def testPerformance(self): token = id(self) message_length = 1024 N = 10000 batch_size = 100 collector = Collector(batch_size) l = 0 port = 6001 host = ('localhost', port) p = launch_echoserver(port) bytecount = 0 try: sent_messages = deque() coio.sleep(1) messenger = Messenger(host) messenger.connect() message_buffer = ''.join('%d' % (i % 10) for i in xrange(N+message_length*2)) i = 0 start_time = timer() for i in xrange(N): if message_length > 4096: message = buffer(message_buffer, i, message_length) else: message = message_buffer[i:i+message_length] bytecount += len(message) messenger.send(message, token, collector) sent_messages.append((message, token)) l += 1 if l % batch_size == 0: replies = collector.collect() for i in xrange(len(replies)): rm, rt = replies[i] sm, st = sent_messages.popleft() if type(sm) is buffer: rm = buffer(rm) if rm != sm: print 'i: ', i assert False collector = Collector(batch_size) end_time = timer() elapsed_time = end_time - start_time print 'Transmitted %d messages with a size of %d bytes' % (N, message_length) print 'Transmission time (with validation): %fs' % elapsed_time print '%.2f requests+replies/s, %.2f MB/s' % (float(N*2) / elapsed_time, (float(bytecount*2) / 2**20) / elapsed_time) messenger.close() finally: os.kill(p.pid, signal.SIGKILL)
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 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)