我建立了一个微型网站服务,但是我发现它挂了很多。通过挂起我的意思是所有的请求将会超时,当它挂起时,我可以看到该过程在服务器上运行良好,像往常一样使用大约15MB的内存。我认为这是一个非常有趣的问题,代码非常简单,请告诉我我做错了什么。蟒蛇微型网站服务总是挂起
app = Bottle()
# static routing
@app.route('/')
def server_static_home():
return static_file('index.html', root='client/')
@app.route('/<filename>')
def server_static(filename):
return static_file(filename, root='client/')
@app.get('/api/data')
def getData():
data = {}
arrayToReturn = []
with open("data.txt", "r") as dataFile:
entryArray = json.load(dataFile)
for entry in entryArray:
if not entry['deleted']:
arrayToReturn.append(entry)
data["array"] = arrayToReturn
return data
@app.put('/api/data')
def changeEntry():
jsonObj = request.json
with open("data.txt", "r+") as dataFile:
entryArray = json.load(dataFile)
for entry in entryArray:
if entry['id'] == jsonObj['id']:
entry['val'] = jsonObj['val']
dataFile.seek(0)
json.dump(entryArray, dataFile, indent=4)
dataFile.truncate()
return {"success":True}
run_simple('0.0.0.0', 80, app, use_reloader=True)
基本上mydomain.com
是我index.html
并加载必要的JS,CSS文件,这就是静态路由部分是做路线。一旦页面被加载,一个ajax GET
请求被激发到/api/data
来加载数据,当我修改数据时,它会触发另一个请求到/api/data
修改数据的ajax Put
请求。
如何重现
这很容易复制的窍门,我只需要访问mydomain.com
并刷新页面10-30倍迅速,那么它会停止响应。但是我永远无法在本地重现这一点,我的刷新速度如此之快,data.txt
在我的本地机器上也是如此。
更新
原来它不是具有读/写文件,但与试图写管道破裂问题的问题。发送请求的客户端在收到所有数据之前关闭连接。我正在寻找解决方案...
如果您在使用附带瓶框架开发服务器的东西,我注意到,水管坏的错误实际上是不可避免的,给予足够的运行时间(它毕竟是一个开发服务器)。如果这适用于您,我建议切换到在更多生产就绪服务器上运行Bottle应用程序。使用Bottle与cherrypy亲自取得了非常好的效果。 – user3351605