如何在Python的RequestHandler处理程序实例中修改SocketServer服务器实例中的变量?
-
28-09-2019 - |
题
这是有问题的代码: 通用标签
每次收到新请求时,我得到的输出都是False
,然后是True
。我想要的是第一次出现False
,然后是True
,此后是True
,之后是True
。
为什么我对服务器实例中的变量所做的修改不保留在处理程序的handle()
函数范围之外?
已更新:
因此,我尝试使用全局变量来实现我想要的功能: 通用标签
它仍然不起作用,即产生与以前相同的输出。谁能告诉我我要去哪里错了?
解决方案
分叉会创建一个新进程,因此您无法在原始进程中修改服务器的变量。请尝试使用ThreadingTCPServer: 通用标签
其他提示
您的问题是SocketServer.ForkingMixin为每个请求创建一个新进程。因此,每次收到新请求时,所有变量都会重置为默认状态。因此,基本上,无论您为self.server.loaded分配什么内容,它都将在下一个请求时重置。这也是为什么全局变量不起作用的原因。
如果您需要一个变量来在请求之间持久化,则最好将数据写在某个地方,例如erpersistable=)。本质上,听起来您正在尝试解决保留会话变量的问题。有上百万种方法可以实现,而根据您的情况,一种方法可能比另一种更为相关。我强烈建议您查看其他基于Python的SocketServer应用程序如何做到这一点。
只需快速谷歌搜索与您相似的代码即可:“ filetype:py SocketServer ForkingMixIn”(第一个结果之一是CherryPy,我强烈建议您看看)。
不隶属于 StackOverflow