这是有问题的代码:
class Server(SocketServer.ForkingMixIn, SocketServer.TCPServer):
__slots__ = ("loaded")
class Handler(SocketServer.StreamRequestHandler):
def handle(self):
print self.server.loaded # Prints "False" at every call, why?
self.server.loaded = True
print self.server.loaded # Prints "True" at every call, obvious!
server = Server(('localhost', port), Handler)
server.loaded = False
while True:
server.handle_request()
每次收到新请求时,我得到的输出为False,然后为True.我想要的是False,之后第一次是True,此后是True,之后是True.
为什么我对服务器实例中的变量所做的修改不保留在处理程序的handle()函数范围之外?
更新:
因此,我尝试使用全局变量来实现所需的功能:
loaded = False
class Server(SocketServer.ForkingMixIn, SocketServer.TCPServer):
pass
class Handler(SocketServer.StreamRequestHandler):
def handle(self):
global loaded
print loaded # Prints "False" at every call still, why?
loaded = True
print loaded # Prints "True" at every call, obvious!
def main():
server = Server(('localhost', 4444), Handler)
global loaded
loaded = False
while True:
server.handle_request()
if (__name__ == '__main__'):
main()
而且它仍然不起作用,即产生与以前相同的输出.谁能告诉我我要去哪里错了?