|
|
@ -93,28 +93,18 @@ class ServerBase(object): |
|
|
|
loop.set_exception_handler(self.on_exception) |
|
|
|
|
|
|
|
shutdown_event = asyncio.Event() |
|
|
|
try: |
|
|
|
async with TaskGroup() as group: |
|
|
|
server_task = await group.spawn(self.serve(shutdown_event)) |
|
|
|
# Wait for shutdown, log on receipt of the event |
|
|
|
await shutdown_event.wait() |
|
|
|
self.logger.info('shutting down') |
|
|
|
server_task.cancel() |
|
|
|
finally: |
|
|
|
await loop.shutdown_asyncgens() |
|
|
|
|
|
|
|
# Prevent some silly logs |
|
|
|
await asyncio.sleep(0.001) |
|
|
|
# Finally, work around an apparent asyncio bug that causes log |
|
|
|
# spew on shutdown for partially opened SSL sockets |
|
|
|
try: |
|
|
|
del asyncio.sslproto._SSLProtocolTransport.__del__ |
|
|
|
except Exception: |
|
|
|
pass |
|
|
|
async with TaskGroup() as group: |
|
|
|
server_task = await group.spawn(self.serve(shutdown_event)) |
|
|
|
# Wait for shutdown, log on receipt of the event |
|
|
|
await shutdown_event.wait() |
|
|
|
self.logger.info('shutting down') |
|
|
|
server_task.cancel() |
|
|
|
|
|
|
|
self.logger.info('shutdown complete') |
|
|
|
|
|
|
|
def run(self): |
|
|
|
loop = asyncio.get_event_loop() |
|
|
|
loop.run_until_complete(self._main(loop)) |
|
|
|
loop.close() |
|
|
|
try: |
|
|
|
loop.run_until_complete(self._main(loop)) |
|
|
|
finally: |
|
|
|
loop.run_until_complete(loop.shutdown_asyncgens()) |
|
|
|