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

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

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

uWSGIは、PythonでWebサービスを動かすアプリケーションサーバの一つです。WSGI(Web Server Gateway Interface)アプリケーションコンテナの一種で、WSGIに則ったDjangoやFlaskなどで動かすことができます。

Flask

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python 3.x

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

API

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

Q&A

解決済

1回答

1728閲覧

【Python + Flask + uWSGI + Nginx】ウェブサービスの複数ユーザの非同期処理について

kenken397

総合スコア15

uWSGI

uWSGIは、PythonでWebサービスを動かすアプリケーションサーバの一つです。WSGI(Web Server Gateway Interface)アプリケーションコンテナの一種で、WSGIに則ったDjangoやFlaskなどで動かすことができます。

Flask

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

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Python 3.x

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

API

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

0グッド

0クリップ

投稿2022/04/16 16:53

編集2022/04/17 12:45

現在APIを用いたウェブサービスを開発しようとしています。

1h毎に特定の処理を定期的に実行する機能をflask内のコードに記載し実装しようとしています。
具体的には以下のような繰り返し処理を想定しています。

python

1while True: 2 a = 0 3 ptint("接続中") 4 time.sleep(3600) 5 a = a+1 6if a > 168 7 break 8

複数ユーザー(100人〜200人程度)に利用してもらうために、当初、flask内のコードにthreadingのモジュールを利用し実行しようとしていましたが、

Flask + uWSGI + Nginxの構成として考えたときに、uWSGI上でマルチプロセスを有効化した構成のほうがいいのでは、と考えるようになりました。

スリープ中はほかの処理が実行できないため、シングルスレッドシングルプロセスから変更が必要な認識です。

上記を踏まえて以下ご質問させてください。

1.複数利用者に同時に機能を実行させるにあたり、
flask内のコードにthreadingを書いたほうがよいか、uWSGI上でマルチプロセス化したほうがよいかどちらが適切か。また、別の実装方法が適切か。

2.uWSGI上でマルチプロセス化するにあたり、
uwsgiのiniファイルのprocessesを値を変更しようと思いますが、上限1000等に設定が可能か。(上限がどのくらいか)

よろしくお願いいたします。

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

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

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

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

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

madoka-t

2022/04/16 17:46

質問です。 100人が常時利用し続けるという文章から、Web Socketを用いたアプリケーション開発かな?と思ったのですが、正しいでしょうか?
kenken397

2022/04/16 21:35

コメントありがとうございます。WebSocketの利用はありません。表現が不適切だったため質問分を修正させていただきました。
madoka-t

2022/04/17 03:21

回答ありがとうございます。 ということはHTTPでロングポーリングを行う実装ということですね。
guest

回答1

0

ベストアンサー

1.複数利用者に同時に機能を実行させるにあたり、flask内のコードにthreadingを書いたほうがよいか、uWSGI上でマルチプロセス化したほうがよいかどちらが適切か。また、別の実装方法が適切か。

Flaskのハンドラ内ではひとつのリクエストを処理するコードしか書けない(はず)なので、Flaskのコードにthreadingの処理を書いても意味が無いと思いますね。
したがって、「uWSGI上でマルチプロセス化」することで同時に処理できるリクエスト数を増やすことが適切だと思います。

2.uWSGI上でマルチプロセス化するにあたり、uwsgiのiniファイルのprocessesを値を変更しようと思いますが、上限1000等に設定が可能か。(上限がどのくらいか)

上限はマシンスペックに依存するので、サーバのメモリ搭載量によって変動しますね。
また、処理の内容によっても実行時のメモリ消費量は変わってくるので、この辺りは実際にコードを実行してメモリ消費量を見ながら調整することになります。

投稿2022/04/17 03:45

madoka-t

総合スコア379

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問