On 5/22/2018 5:21 AM, Ken Hilton wrote:
Hi all,
Just a simple idea I wanted to bring forth. Although I know that you get
a lot more asyncio control by importing the asyncio module itself, I'd
like to see a way to make simple asynchronous applications without ever
importing asyncio itself. To that end, I propose making
asyncio.get_event_loop() a builtin. This would enable simple things like
this (example copied from websockets.readthedocs.io
<http://websockets.readthedocs.io> with slight modifications):
import websockets
async def hello():
async with websockets.connect('wss://echo.websocket.org
<http://echo.websocket.org>') as ws:
amsg = 'a message'
print(f'> {amsg}')
await ws.send(amsg)
ret = await ws.recv()
print(f'< {ret}')
get_event_loop().run_until_complete(hello())
(Should that really be 'hello()' rather than 'hello'? I don't remember.)
I like the idea of making coroutines easier and use. It would make more
sense to me to expose an eventloop class as a builtin, so that one would
write
eventloop().run_until_complete(hello)
eventloop would not necessarily have to be exactly the same as the
default returned by get_event_loop. Would all the asyncio eventloop
methods be needed? For running coroutines, it would be even nicer to write
eventloop().run(hello)
Eventloop could have an .__init__ method, or be a factory function, with
a 'loop' parameter. The value specifies which eventloop implementation
adaptor to use. The default might be 'asyncio', with alternatives such
as 'uvloop', 'tkloop' (partly prototyped), 'twisted', and others. The
adaptors should all have the same api: .run method that exits on
completion, or a .run (forever) method paired with .stop.
--
Terry Jan Reedy
_______________________________________________
Python-ideas mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/