問題のコードは次のとおりです。
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()
そして、それはまだ機能しません。つまり、以前と同じ出力が生成されます。誰かが私が間違っているところを教えてもらえますか?