Hi Yury, > Am 2016-05-04 um 00:43 schrieb Yury Selivanov <yselivanov...@gmail.com>: > > Hi, > > Please check out a new asyncio event loop implementation uvloop. > Here's a blog post about it: > http://magic.io/blog/uvloop-make-python-networking-great-again/ > > Thanks, Yury
very nice work. aiomas (https://aiomas.readthedocs.io/) works very well with it. I only found one problem: the default event loop's create_task() accepts the empty string '' as host name and will bind the server to all available interfaces. With uvloop however, I get a TypeError: File "uvloop/loop.pyx", line 1026, in create_server (uvloop/loop.c:19287) File "uvloop/loop.pyx", line 509, in uvloop.loop.Loop._getaddrinfo (uvloop/loop.c:12059) TypeError: host must be a str or bytes The low-level aiomas example attached at the end of this mail takes ~22s with the default event loop but only ~15s with uvloop, which is ~45% faster. :-) Cheers, Stefan # # uvloop benchmark # import asyncio import aiomas import uvloop asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) N_CLIENTS = 100 N_MSGS = 1000 async def handle_client(channel): """Handle a client connection.""" try: while True: req = await channel.recv() # print(req.content) await req.reply('cya') except ConnectionResetError: await channel.close() async def client(): """Client coroutine: Send a greeting to the server and wait for a reply.""" channel = await aiomas.channel.open_connection(('localhost', 5555)) for _ in range(N_MSGS): rep = await channel.send('ohai') # print(rep) await channel.close() server = aiomas.run(aiomas.channel.start_server(('localhost', 5555), handle_client)) t_clients = [client() for _ in range(N_CLIENTS)] aiomas.run(asyncio.gather(*t_clients)) server.close() aiomas.run(server.wait_closed())