如何在Python的RequestHandler处理程序实例中修改SocketServer服务器实例中的变量?

StackOverflow https://stackoverflow.com/questions/3868132

这是有问题的代码: 通用标签

每次收到新请求时,我得到的输出都是False,然后是True。我想要的是第一次出现False,然后是True,此后是True,之后是True

为什么我对服务器实例中的变量所做的修改不保留在处理程序的handle()函数范围之外?

已更新:

因此,我尝试使用全局变量来实现我想要的功能: 通用标签

它仍然不起作用,即产生与以前相同的输出。谁能告诉我我要去哪里错了?

有帮助吗?

解决方案

分叉会创建一个新进程,因此您无法在原始进程中修改服务器的变量。请尝试使用ThreadingTCPServer: 通用标签

其他提示

您的问题是SocketServer.ForkingMixin为每个请求创建一个新进程。因此,每次收到新请求时,所有变量都会重置为默认状态。因此,基本上,无论您为self.server.loaded分配什么内容,它都将在下一个请求时重置。这也是为什么全局变量不起作用的原因。

如果您需要一个变量来在请求之间持久化,则最好将数据写在某个地方,例如erpersistable=)。本质上,听起来您正在尝试解决保留会话变量的问题。有上百万种方法可以实现,而根据您的情况,一种方法可能比另一种更为相关。我强烈建议您查看其他基于Python的SocketServer应用程序如何做到这一点。

只需快速谷歌搜索与您相似的代码即可:“ filetype:py SocketServer ForkingMixIn”(第一个结果之一是CherryPy,我强烈建议您看看)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top