0
我在Python 3.4中擴展socketserver.ThreadingMixIn
來構建我自己的線程服務器,同時保持原始回調僅爲記錄海豚而越冬。 激活和創建非常簡單,根據python文檔,我遇到的問題是使用server.shutdown()
停止該服務器。它捲曲並不會退出。我需要關閉該服務器而不使用ctrl-c的方式,因爲它也會涉及到該服務器的一些GUI。在python中停止socketserver.ThreadingMixIn
基本服務器:
class ServerBasic(socketserver.ThreadingMixIn,socketserver.TCPServer):
logging.basicConfig(level=logging.DEBUG,format='%(name)s: %(message)s',)
def __init__(self, log_name,server_address, handler_class=ThreadedRequestHandler):
self.logger = logging.getLogger(log_name)
self.logger.debug('__init__')
socketserver.TCPServer.__init__(self, server_address, handler_class)
return
def server_activate(self):
self.logger.debug('server_activate')
socketserver.TCPServer.server_activate(self)
return
def serve_forever(self):
self.logger.debug('waiting for request')
self.logger.info('Handling requests, press <Ctrl-C> to quit')
while True:
self.handle_request()
return
延伸類:
class ManagerServer(PIRServerBasic):
def __init__(self, log_name, handler_class=T_ManagerRequestHandler):
self.tup_socket = (ipAddress, WELCOME_PORT) # tuple of the address and port
self.log_name = log_name
return ServerBasic.__init__(self, log_name, self.tup_socket, handler_class=handler_class)
在這裏,這一切是如何創建並運行:
o_serverManager = ManagerServer('Manager_Server', T_ManagerRequestHandler)
t_managerServer = threading.Thread(target=o_serverManager.serve_forever)
t_managerServer.daemon = True
t_managerServer.start()
sleep(15)
o_serverManager.shutdown()
shutdown命令後,程序被卡住。
你的答案解決了我的問題。我沒有看到該回調的原始實現,它確實阻止了我的主線程退出。謝謝 – Eli