我有一个python BaseHTTPRequestHandler
类,它由HTTPServer
类调用。基本上,BaseHTTPRequestHandler
只运行一个基本算法,然后响应Get
请求。问题是,每次我执行一个Get
请求时,我都会得到正确的响应,但是{
在任何人建议创建一个类或全局变量之前,我使用一个线程同时创建这个类的多个实例,这样做可以使每个线程上的所有实例共享并替换彼此的数据。在
代码(复制和粘贴时缩进)
BaseHTTPRequestHandler
这个简化的版本只记录已发生的警报的数量。{I{I>如果问题是实例的话,总是重置一个类的count。在
class SimulationServer(BaseHTTPRequestHandler):
def __init__(self, address, port, randomNumberMax, *args):
self.IP_ADDRESS = address
self.PORT = port
self.RANDOM_NUMBER_MAX = randomNumberMax
self.COUNT = 0
BaseHTTPRequestHandler.__init__(self, *args)
def do_GET(self):
if self.headers['Authorization'] == 'Basic ' + str(key):
print("send response")
self.do_HEAD()
randomNumberMax = self.RANDOM_NUMBER_MAX
response = ""
if randint(0, randomNumberMax) == 0:
self.generateAlert()
base_path = urlparse(self.path).path
print('base_path: ' + base_path)
if base_path == '/count':
response = self.getCount()
self.wfile.write(bytes(response, 'utf-8'))
def getCount(self):
count = self.COUNT
jsonString = '{"_sig": "","count": ' + str(count) + '}'
return jsonString
def generateAlert(self):
newAlert = {}
newAlert['siteId'] = "siteId"+ str(self.COUNT)
newAlert['mesg'] = "Simulated Alert"
newAlert['when'] = int(time.time())
self.COUNT += 1
HTTPServer
^{pr2}$Main
这个类创建HTTPServer
,并附加handler
class RunSimulator(object):
def run(self, alertFrequency=50, port=9000):
ipAddress="127.0.0.1"
def handler(*args):
SimulationServer(ipAddress, port, alertFrequency, *args)
simulationServer = CustomHTTPServer((ipAddress, port), handler)
simulationServer.set_auth('username', 'password')
try:
simulationServer.serve_forever()
except KeyboardInterrupt:
pass
simulationServer.server_close()
print(time.asctime(), "Server Stops - %s:%s" % (ipAddress, port))
if __name__ == "__main__":
from sys import argv
simu = RunSimulator()
simu.run()
所以简单的回答是,每次发送请求时,它都会创建一个新实例。在
BaseHTTPServer.HTTPServer
是SocketServer.TCPServer
的一个子类,它本身就是SocketServer.BaseServer
的子类。每次请求进来时,它都会处理请求process_request
,然后调用finish_request
。finish_request
将实例化请求处理程序的新实例。在相关问题 更多 >
编程相关推荐