mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-18029 Use TSingleThreadedServer instead of TThreadedServer
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
import socket
|
||||
import threading
|
||||
|
||||
from _pydev_comm.server import TSingleThreadedServer
|
||||
from _pydev_comm.transport import TSyncClient, open_transports_as_client, _create_client_server_transports
|
||||
from _shaded_thriftpy.protocol import TBinaryProtocolFactory
|
||||
from _shaded_thriftpy.server import TThreadedServer
|
||||
from _shaded_thriftpy.thrift import TProcessor
|
||||
|
||||
|
||||
@@ -21,15 +21,8 @@ def start_rpc_server(server_transport, server_service, server_handler, proto_fac
|
||||
strict_write=False)):
|
||||
# setup server
|
||||
processor = TProcessor(server_service, server_handler)
|
||||
|
||||
# todo as `server.serve()` is excessive we may want to get rid of `server` as `TThreadedServer`
|
||||
server = TThreadedServer(processor, server_transport, iprot_factory=proto_factory)
|
||||
|
||||
client = server.trans.accept()
|
||||
t = threading.Thread(target=server.handle, args=(client,))
|
||||
t.setDaemon(True)
|
||||
t.start()
|
||||
|
||||
server = TSingleThreadedServer(processor, server_transport, daemon=True, iprot_factory=proto_factory)
|
||||
server.serve()
|
||||
return server
|
||||
|
||||
|
||||
@@ -61,11 +54,5 @@ def _rpc_server(server_socket, server_service, client_service, server_handler_fa
|
||||
|
||||
# setup server
|
||||
processor = TProcessor(server_service, server_handler)
|
||||
|
||||
# todo as `server.serve()` is excessive we may want to get rid of `server` as `TThreadedServer`
|
||||
server = TThreadedServer(processor, server_transport, iprot_factory=proto_factory)
|
||||
|
||||
client = server.trans.accept()
|
||||
t = threading.Thread(target=server.handle, args=(client,))
|
||||
t.setDaemon(True)
|
||||
t.start()
|
||||
server = TSingleThreadedServer(processor, server_transport, daemon=True, iprot_factory=proto_factory)
|
||||
server.serve()
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
import threading
|
||||
import traceback
|
||||
|
||||
from _shaded_thriftpy.server import TServer
|
||||
from _shaded_thriftpy.transport import TTransportException
|
||||
|
||||
|
||||
class TSingleThreadedServer(TServer):
|
||||
"""Server that accepts a single connection and spawns a thread to handle it."""
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.daemon = kwargs.pop("daemon", False)
|
||||
TServer.__init__(self, *args, **kwargs)
|
||||
|
||||
def serve(self):
|
||||
self.trans.listen()
|
||||
try:
|
||||
client = self.trans.accept()
|
||||
t = threading.Thread(target=self.handle, args=(client,))
|
||||
t.setDaemon(self.daemon)
|
||||
t.start()
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except Exception as x:
|
||||
traceback.print_exc()
|
||||
|
||||
def handle(self, client):
|
||||
itrans = self.itrans_factory.get_transport(client)
|
||||
otrans = self.otrans_factory.get_transport(client)
|
||||
iprot = self.iprot_factory.get_protocol(itrans)
|
||||
oprot = self.oprot_factory.get_protocol(otrans)
|
||||
try:
|
||||
while True:
|
||||
self.processor.process(iprot, oprot)
|
||||
except TTransportException:
|
||||
pass
|
||||
except Exception as x:
|
||||
traceback.print_exc()
|
||||
|
||||
itrans.close()
|
||||
otrans.close()
|
||||
Reference in New Issue
Block a user