質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1028閲覧

[Google Cloud Platform (Compute Engine)]GCP上に構築したWebシステムでファイルアップロードに時間がかかる

munito

総合スコア1

Google Cloud Platform

Google Cloud Platformは、Google社がクラウド上で提供しているサービス郡の総称です。エンドユーザー向けサービスと同様のインフラストラクチャーで運営されており、Webサイト開発から複雑なアプリ開発まで対応可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/04 11:35

前提・実現したいこと

Google Cloud Platform(Compute Engine)上にPython(Flask)を使ってWebシステムを構築しようとしています。
システム内容は画像をアップロードしてその画像を表示するだけのシステムです。
(実現したいシステムから問題の箇所のみを切り出しています。)

ローカル環境であればすぐに画像が表示されるのですが、GCP上で実行すると画像が表示されるのに時間がかかってしまします。
原因や原因を調べる方法などわかる方いましたら、ご教授いただけますでしょうか。
よろしくお願いいたします。

発生している問題・エラーメッセージ

GCP上で実行すると800KB程度の画像を表示させるのに30秒程度かかってしまう。
マシンタイプは「e2-micro(vCPU x 2、メモリ 1 GB)」を使用しています。

下記はGoogleディベロッパーツールで確認した結果です。
イメージ説明

app.py

python

1from flask import Flask 2from flask import render_template 3from flask import request 4 5app = Flask(__name__) 6app = Flask(__name__, static_folder="assets", template_folder="assets/html") 7 8@app.route("/") 9def index(): 10 return render_template('index.html') 11 12 13@app.route("/file-upload", methods=["POST"]) 14def fileUpload(): 15 imgFile = request.files['image-input'] 16 imgPath = 'assets/img/' + imgFile.filename 17 imgFile.save(imgPath) 18 return render_template('viewImage.html', imagePath="/" + imgPath) 19 20 21if __name__ == '__main__': 22 app.run(host="0.0.0.0", port=5000, debug=True) 23

assets/html/index.html

html

1<!doctype html> 2<html> 3<head><title>test</title></head> 4 5<body> 6 <h2>test</h2> 7 <form action="/file-upload" enctype="multipart/form-data" method="post"> 8 JPEG,PNG 9 <input type="file" name="image-input" accept="image/jpeg, image/png"> 10 <br> 11 <input type="submit" value="送信する"> 12 </form> 13</body> 14 15</html>

assets/html/viewImage.html

html

1<!doctype html> 2<html> 3<head><title>test</title></head> 4 5<body> 6 <h2>test</h2> 7 <img src={{ imagePath }}> 8</body> 9 10</html>

docker-compose.yml

version: '3' services: app: container_name: flask-test2 build: . ports: - "5000:5000" tty: true environment: TZ: Asia/Tokyo volumes: - .:/work

Dockerfile

FROM python:3.8.5 ARG project_dir=/work/ ADD requirements.txt $project_dir WORKDIR $project_dir RUN pip install --upgrade pip RUN pip install -r requirements.txt EXPOSE 5000

requirements.txt

flask

試したこと

ローカル環境ではすぐに画像が表示されるのですが、
GCP上では時間がかかってしまう。

補足情報(FW/ツールのバージョンなど)

Google Cloud Platform (Compute Engine), Docker, docker-compose, Python, Flask

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

調べる方法

ということなので。

とりあえずどこに時間がかかっているのか切り分けましょう。

・ファイルのアップロード(POST)にどのくらい時間が掛かっているか
・ファイルのダウンロードにどのくらい時間が掛かっているか
・saveにどのくらい時間がかかっているか

アップロードとダウンロードは、Chrome等についている開発ツールでネットワークあたりを見ていればどのくらい時間が掛かっているかわかると思います。
save部分は、とりあえずflask(python)のコードに時間を出力するコードを入れてみてはどうでしょうか。
saveと表示が同じだとわかりにくいので、表示するためのコード(GET)と
ファイルをアップロードするコード(POST)を分けた方が計測しやすいかもしれません。

時間が掛かっている部分がわかったら、それを掘り下げましょう。

掲載されているコードがそんなに遅いとは思えないので、ネットワークが遅いんじゃないかと思うのですが、早い環境で試せたりしませんか?

それからついでですが、Webサーバ(ApacheやNginx)を使っていないように見えるので、gunicornやmod_wsgiなどを使って起動し、Webサーバも設置した方が良いと思います。(開発サーバをそのまま使うのはやめた方が良いです)

投稿2021/07/05 02:51

FiroProchainezo

総合スコア2401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

munito

2021/07/05 10:22 編集

自宅固定回線のアップロード速度が遅いことが原因でした。 お騒がせして申し訳ありません。 自宅以外の回線から試してみたところ応答速度が改善しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問