Queer European MD passionate about IT
Prechádzať zdrojové kódy

Cancel pending tasks although they are done

Davte 5 rokov pred
rodič
commit
40f48e3b95
1 zmenil súbory, kde vykonal 17 pridanie a 7 odobranie
  1. 17 7
      src/server.py

+ 17 - 7
src/server.py

@@ -100,6 +100,22 @@ class Server:
             self._working = False  # Reset peer_is_sender
         return
 
+    def run(self):
+        loop = asyncio.get_event_loop()
+        logging.info("Starting file bridging server...")
+        try:
+            loop.run_until_complete(self.run_server())
+        except KeyboardInterrupt:
+            logging.info("Stopping...")
+            # Cancel connection tasks (they should be done but are pending)
+            for task in asyncio.all_tasks(loop):
+                task.cancel()
+            loop.run_until_complete(
+                self.server.wait_closed()
+            )
+        loop.close()
+        logging.info("Stooped.")
+
     async def run_server(self):
         self._server = await asyncio.start_server(
             client_connected_cb=self.connect,
@@ -174,14 +190,8 @@ if __name__ == '__main__':
             logging.info("Invalid port. Enter a valid port number!")
             _port = None
 
-    loop = asyncio.get_event_loop()
     server = Server(
         host=_host,
         port=_port,
     )
-    logging.info("Starting file bridging server...")
-    try:
-        loop.run_until_complete(server.run_server())
-    except KeyboardInterrupt:
-        logging.info("Stopping...")
-    loop.close()
+    server.run()