我正在尝试呼叫服务器来检查它的状态。服务器代码具有全局变量" status"设置为True或False。服务器发送' UP'或者' DOWN'基于状态值。
我将服务器文件导入到我的主文件中并尝试将变量设置为False。然后我发送了一个新的请求,期待一个“下降”。状态。
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']
现在我期待一个'DOWN'第5行的回复,但它总是返回' UP'。我也在服务器的请求处理程序中打印状态值。即使第4行和第6行打印为False,状态也会打印为True(第5行)而不是False。
服务器代码没有问题,我确定。这可能是因为我调用服务器或使用urllib2的方式。关于我做错了什么的任何建议。
答案 0 :(得分:0)
这里没有足够的信息来正确理解出了什么问题。但是服务器本身几乎肯定是在一个完全独立的进程中运行,以允许它响应请求。该进程中的内部变量不会以任何方式与您在shell中导入代码所获得的内部变量共享;他们不可能。
要使其工作,您需要实际将值传递给服务器进程。最简单的方法可能是将其写入文件,并让服务器定期读取该文件。或者你可以用套接字实现类似的东西。
答案 1 :(得分:0)
正如我在评论和Daniel的回答中所描述的那样,客户端和服务器是两个不同的进程,它们不共享status
变量,即使在同一个python模块中定义了两个都是导入。
我建议客户端通过HTTP调用指定状态,将其POST到服务器
query_args = { 'status': 'DOWN' }
encoded_args = urllib.urlencode(query_args)
response = urllib2.urlopen(url, encoded_args).read()
然后服务器可以检查POST数据并相应地更新其状态(假设整个交互有任何意义)