【发布时间】:2014-07-23 12:03:46
【问题描述】:
我在 Python 3.4 中扩展 socketserver.ThreadingMixIn 以构建我自己的线程服务器,同时保持原始回调仅用于记录海豚。
激活和创建非常简单,根据 python 文档,我遇到的问题是使用server.shutdown() 停止该服务器。它卷曲并且不退出。我需要在不使用 ctrl-c 的情况下关闭该服务器,因为它还会涉及该服务器的一些 GUI。
基础服务器:
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()
关闭命令后程序卡住了。
【问题讨论】:
标签: python multithreading serversocket asyncsocket