全局变量更改未反映在服务器调用中

Global variable change not reflecting in server call

我正在尝试调用服务器来检查它的状态。服务器代码有一个全局变量 "status",它被设置为 True 或 False。服务器根据状态值发送 'UP' 或 'DOWN'。

我正在将服务器文件导入我的主文件并尝试将变量设置为 False。然后我发送一个新请求并期望 'DOWN' 状态。

myfile.py

import server

response = urllib2.urlopen(url).read()  #1
server.print_status() #2 Prints True (the default value) as expected
server.status = False #3
server.print_status() #4 Prints False as expected
response = urllib2.urlopen(url).read()  #5
server.print_status() #6 Prints False as expected

server.py

status = True

def print_status()
    global status
    print status

class Handler(object):
    @staticmethod
    def handle(start_response):
        global status
        print status
        if status:
            start_response('200 OK')
            return ['UP']
        else:
            start_response('503 Service Unavailable')
            return ['DOWN']

现在我希望在第 5 行收到 'DOWN' 响应,但它总是返回 'UP'。我也在服务器的请求处理程序中打印状态值。那里的状态打印为 True(第 5 行)而不是 False,即使第 4 行和第 6 行打印为 False。

我确定服务器代码没有问题。这可能是因为我调用服务器或使用 urllib2 的方式。关于我做错了什么的任何建议。

这里没有足够的信息来正确理解出了什么问题。但是服务器本身几乎可以肯定 运行 在一个完全独立的进程中,以允许它响应请求。该过程中的内部变量不会以任何方式与您通过在 shell 中导入代码获得的变量共享;他们不可能。

要完成这项工作,您需要将值实际传递给服务器进程。最简单的方法可能是将其写入文件,并让服务器定期读取该文件。或者你可以用套接字实现类似的东西。

正如我的评论和 Daniel 的回答中所述,客户端和服务器是两个不同的进程,它们不共享 status 变量,即使定义在同一个 python 模块中也是如此两者都导入。

我建议让客户端通过 HTTP 调用指定状态,POST将其发送到服务器

query_args = { 'status': 'DOWN' }
encoded_args = urllib.urlencode(query_args)
response = urllib2.urlopen(url, encoded_args).read()

然后服务器可以检查 POST 数据并相应地更新其状态(假设整个交互有意义)