Bug report
Bug description:
When writing an asyncio based service, you basically have this sequence:
- Create an event loop
- Register a SIGTERM handler
- Start your server
loop.run_forever()
- SIGTERM causes a
loop.stop()
- Close the server
- Close event loop
If there are any connections active at this point, then they don't get discarded until interpreter shutdown, with the result that you get a bunch of ResourceWarnings (and cleanup code might not run).
It would be very useful if there was a Server.close_clients() or something like that. Even a Server.all_transports() would be useful, as then you could do something similar as when doing a Task.cancel() on what you get from loop.all_tasks().
We could poke at Server._transports, but that is something internal that might change in the future.
There is Server.wait_closed(), but that hangs until all clients have gracefully disconnected. It doesn't help us when we want to shut down the service now.
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
Bug report
Bug description:
When writing an asyncio based service, you basically have this sequence:
loop.run_forever()loop.stop()If there are any connections active at this point, then they don't get discarded until interpreter shutdown, with the result that you get a bunch of ResourceWarnings (and cleanup code might not run).
It would be very useful if there was a
Server.close_clients()or something like that. Even aServer.all_transports()would be useful, as then you could do something similar as when doing aTask.cancel()on what you get fromloop.all_tasks().We could poke at
Server._transports, but that is something internal that might change in the future.There is
Server.wait_closed(), but that hangs until all clients have gracefully disconnected. It doesn't help us when we want to shut down the service now.CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs