私はマイクロウェブサービスを構築しましたが、それはたくさんハングすることがわかりました。ハングアップすると、すべてのリクエストがタイムアウトし、ハングアップすると、プロセスが通常どおり約15MBのメモリしか使用していないサーバーで正常に動作していることがわかります。私はポストするのは非常に興味深い問題だと思う、コードは非常に簡単です、私が間違っていることを教えてください。Pythonマイクロウェブサービスは常にハングします
基本的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
に送信され、データがロードされ、データを変更すると、別のajax Put
リクエストが/api/data
に送信され、データが変更されます。これは、ハングを再現するのは非常に簡単です
を再現する方法
は、私はちょうどそれが応答を停止します、
mydomain.com
を訪問し、急速に10〜30回のページを更新する必要があります。しかし、私はこれをローカルで再現することは決してできませんでした。data.txt
は私のローカルマシンで同じです。 更新
それがファイルへの読み取り/書き込みに問題はなく、パイプを破らへの書き込みしようとしているとの問題ではないのですが判明。要求を送信したクライアントは、すべてのデータを受信する前に接続を閉じます。私は現在解決策を探しています...
ような何かが、私は十分な稼働時間(それはすべての後のdevのサーバーで)与えられた、壊れたパイプのエラーが事実上避けられないことに気付きました。それがあなたに当てはまるなら、私はボトルアプリケーションを実稼動環境の良いサーバーの上で稼動させることをお勧めします。私は個人的には、ボトルとサクランピーを使って本当に良い結果を出しました。 – user3351605