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

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

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

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

1回答

959閲覧

Python: 一定時間内に来たHTTPリクエストをまとめて処理する方法

masaokb

総合スコア12

Flask

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

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

3クリップ

投稿2017/08/06 13:05

###前提・実現したいこと
HTTPリクエストが不定期に来る状況で、一定時間(例えば1秒間など)に来たリクエストをまとめて処理し、
処理後にその結果をそれぞれのリクエストに返すにはどうすればよいでしょうか。

というのは、ユーザが画像を投稿し、それに対し、「これはxxである」という回答を返すという画像認識のサービスを作ろうとしていて、
学習したニューラルネットワークの予測モデルをAPIとして用いようとしており、
一枚の予測の計算時間に500msほどかかるのですが、それをバッチ処理してスループットを上げたい、という状況です。
(GPUを積んでおり、並列処理のコストが低いです。)

自分でトライした時は、FlaskやAiohttpを用いようとしましたが、各リクエストごとにプロセスが決まっているのではなく、
全体のプロセスをどうまとめればよいのか分かりませでした。
Webサーバには疎く、基礎的な質問かもしれませんが、よろしくお願いします。

###補足情報

  • Python3.6
  • Flaskを用いた場合の、一枚の画像を処理する疑似コード
app = Flask(__name__) net = My_net() @app.route('/', methods=['POST']) def main(): image = Image.open(request.files["file"]) prediction = My_net.predict(image) return prediction app.run(debug=True, host='0.0.0.0', port=5050)

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

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

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

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

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

guest

回答1

0

機械学習に疎くて申し訳ないのですが、処理に時間がかかるリクエストが複数来た場合に同時にリクエストを処理(並列処理)させたいという質問であっていますか?

まず Flask のテスト用サーバーで並列化させるには、app.run() に processes オプションに並列数を指定します。

python

1app.run(debug=True, host='0.0.0.0', port=5050, processes=8)

もし Windows の場合は替わりに threaded オプションを使って下さい。

python

1app.run(debug=True, host='0.0.0.0', port=5050, threaded=true)

これでリクエストが別プロセスで並列処理されるようになります。

ただしこれはあくまでテスト用サーバーの話です。実際にはWebサーバーに Apache や nginx を使うと思いますので、それぞれのシステムで設定を行って下さい。

たとえば Apache + mod_wsgi の組み合わせであれば、mod_wsgi をデーモンモードで使うことで任意のプロセス・スレッド数で Flask アプリを起動させることができます。

# Linux + Apache 2.4 + mod_wsgi 設定例 WSGIDaemonProcess gazou user=masaokb processes=8 WSGIScriptAlias / /home/masaokb/flask-gazou/webapp.wsgi <Directory /home/masaokb/flask-gazou> WSGIProcessGroup gazou Require all granted </Directory>

投稿2017/08/09 02:13

miyahan

総合スコア3095

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問