Update bridge (DMOJ)
This commit is contained in:
parent
77e64f1b85
commit
3629369fba
34 changed files with 770 additions and 2199 deletions
30
judge/bridge/server.py
Normal file
30
judge/bridge/server.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
import threading
|
||||
from socketserver import TCPServer, ThreadingMixIn
|
||||
|
||||
|
||||
class ThreadingTCPListener(ThreadingMixIn, TCPServer):
|
||||
allow_reuse_address = True
|
||||
|
||||
|
||||
class Server:
|
||||
def __init__(self, addresses, handler):
|
||||
self.servers = [ThreadingTCPListener(address, handler) for address in addresses]
|
||||
self._shutdown = threading.Event()
|
||||
|
||||
def serve_forever(self):
|
||||
threads = [threading.Thread(target=server.serve_forever) for server in self.servers]
|
||||
for thread in threads:
|
||||
thread.daemon = True
|
||||
thread.start()
|
||||
try:
|
||||
self._shutdown.wait()
|
||||
except KeyboardInterrupt:
|
||||
self.shutdown()
|
||||
finally:
|
||||
for thread in threads:
|
||||
thread.join()
|
||||
|
||||
def shutdown(self):
|
||||
for server in self.servers:
|
||||
server.shutdown()
|
||||
self._shutdown.set()
|
Loading…
Add table
Add a link
Reference in a new issue