if 0: import os, logging os.environ['PYTHONASYNCIODEBUG'] = '1' logging.basicConfig(level=logging.DEBUG) import asyncio import signal LISTEN_HOST = '0.0.0.0' LISTEN_PORT = 8888 LIMIT = 1024 * 1024 * 2 writers = [] async def handler(reader, writer): writers.append(writer) buf = b'' nbr_lines = 0 total = 0 while True: data = await reader.readline() if not data: break total += len(data) data = buf + data lines = data.split(b'\n') buf = lines.pop() nbr_lines += len(lines) print('{} lines sent ({} kB)'.format(nbr_lines, total / 1024)) writer.close() async def run(loop): def close(): for writer in writers: writer.close() server.close() server = await asyncio.start_server( handler, LISTEN_HOST, LISTEN_PORT, loop=loop, limit=LIMIT) print("server is listening to %s:%s" % (LISTEN_HOST, LISTEN_PORT)) print("Read limit: %.1f kB" % (LIMIT / 1024)) if 0: for signame in ('SIGINT', 'SIGTERM'): signum = getattr(signal, signame) loop.add_signal_handler(signum, close) await server.wait_closed() if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(run(loop)) loop.close()