ch21: simplified asyncio examples with modern API

This commit is contained in:
Luciano Ramalho 2020-02-19 22:51:38 -03:00
parent 06f18c3765
commit 3deed0af7b
2 changed files with 15 additions and 24 deletions

View File

@ -38,26 +38,19 @@ async def handle_queries(reader, writer): # <3>
# END TCP_CHARFINDER_TOP
# BEGIN TCP_CHARFINDER_MAIN
def main(address='127.0.0.1', port=2323): # <1>
async def main(address='127.0.0.1', port=2323):
port = int(port)
loop = asyncio.get_event_loop()
server_coro = asyncio.start_server(handle_queries, address, port,
loop=loop) # <2>
server = loop.run_until_complete(server_coro) # <3>
server = await asyncio.start_server(
handle_queries, address, port)
host = server.sockets[0].getsockname() # <4>
print('Serving on {}. Hit CTRL-C to stop.'.format(host)) # <5>
try:
loop.run_forever() # <6>
except KeyboardInterrupt: # CTRL+C pressed
pass
addr = server.sockets[0].getsockname()
print(f'Serving on {addr}. Hit CTRL-C to stop.')
print('Server shutting down.')
server.close() # <7>
loop.run_until_complete(server.wait_closed()) # <8>
loop.close() # <9>
async with server:
await server.serve_forever()
if __name__ == '__main__':
main(*sys.argv[1:]) # <10>
asyncio.run(main(*sys.argv[1:])) # <10>
# END TCP_CHARFINDER_MAIN

View File

@ -17,14 +17,12 @@ async def countdown(label, delay):
print(f'{dt:7.4f}s \t{tabs}{label} = {n}')
n -= 1
loop = asyncio.get_event_loop()
tasks = [
loop.create_task(countdown('A', .7)),
loop.create_task(countdown('B', 2)),
loop.create_task(countdown('C', .3)),
loop.create_task(countdown('D', 1)),
coros = [
countdown('A', .7),
countdown('B', 2),
countdown('C', .3),
countdown('D', 1),
]
t0 = time.perf_counter()
loop.run_until_complete(asyncio.wait(tasks))
loop.close()
asyncio.run(asyncio.wait(coros))
print('' * 50)