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

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

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

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

Python

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

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

Q&A

解決済

1回答

943閲覧

flask内におけるネットワーク分散処理のやり方について

alfald

総合スコア19

Flask

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

Python

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

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

0グッド

0クリップ

投稿2022/04/12 02:46

編集2022/04/15 09:01

実現したいこと

flaskを実行しているプログラムの中で、送られてきたデータをネットワーク上で分散処理を行いたい
→pythonプログラム内で、複数のサーバーに処理を投げ、その結果を元のサーバーでまとめて受け取りたい。

処理の流れ
jsonデータがpostで送られてくる→送られてきたデータを100個に分割する(for文で回すイメージ)→分割されたデータを別々のサーバーで処理を行う(実現したいこと)→元のサーバーに処理結果を集約する(実現したいこと)→処理結果を送り返す

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

・ネットワーク分散処理をscoopを用いて行ってみたが、scoopではpythonファイルを実行して分散処理を行う形式だったため、自分のやろうとしていることと違った。
・・SCOOPでだめな理由として、SCOOPを用いて分散処理を行う場合はpython -m scoop --host localhost test.pyのようにファイルを起動する必要があるためです。自分の行いたいことはflask runを実行している中で、外部から送られてきたデータを分散処理したいためです。
もしかしたら、SCOOPでもそのような方法があるのかもしれませんが、その方法を見つけることができませんでした。

参照:https://fx-kirin.com/python/python-scoop/

構成したいイメージ

イメージ説明

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

それぞれのサーバーは仮想マシンで構成するため、同一ネットワーク上にある。

低評価の場合は、その理由もあるとありがたいです。
改善を心がけます。

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

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

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

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

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

alfald

2022/04/12 04:44

低評価の場合は、その理由もあるとありがたいです。 改善を心がけます。
FiroProchainezo

2022/04/12 10:01

低評価は付けていませんが、丸投げの様に見えていて、かつ、「分散処理ができるような方法」を提示しても「やろうとしてることと違う」と言われそうだから回答しようが無いんじゃないかと思います。 「分散処理を行いたい」という要望が記載されていますが、 「ネットワーク分散処理をscoopを用いて行ってみたが、上手くいかなかった」 「pythonファイルを実行して分散処理を行う形式だったため、自分のやろうとしていることと違う」 について詳細が記載されていません。(丸投げっぽいです) 「ネットワーク分散処理をscoopを用いて行ってみたが、上手くいかなかった」 については、実際に動作したコードが無く「コードイメージ」にはアドバイスしようがない為、回答できません。 「pythonファイルを実行して分散処理を行う形式だったため、自分のやろうとしていることと違う」 については、要望に記載されている「分散処理を行いたい」を満たしているのに「自分のやろうとしていることと違う」と書かれていて、肝心の「自分のやろうとしていること」の記載がないので回答できません。 回答者は相手の心は読めないので、「思っていること」や「やったこと」、「ダメだったこと」、「本当の要望」を書かないと誰も回答できません。 その辺を記載すると回答が付くかもしれません。
alfald

2022/04/13 00:24 編集

確かにそうですね。 丸投げ感があり過ぎました。 ご指摘ありがとうございます。 コードイメージはやったことではなく、やりたいことのイメージだったのですが、そのあたりも認識の違いが出てくるのですね。
quickquip

2022/04/13 00:57 編集

端的には、ここには質問が書かれていない、と感じました。 とはいえ「それっぽいライブラリを紹介してほしい」くらいの意図だとはわかるんですが、そうなると「SCOOPでだめな理由がわからない、だからなにも紹介できない」が正直なところです。
alfald

2022/04/13 01:40 編集

なるほど ありがとうございます。 SCOOPでだめな理由ですが、SCOOPを用いて分散処理を行う場合は`python -m scoop --host localhost test.py`のようにファイルを起動する必要があるためです。自分の行いたいことは`flask run`を実行している中で、外部から送られてきたデータを分散処理したいためです。 もしかしたら、SCOOPでもそのような方法があるのかもしれませんが、その方法を見つけることができませんでした。
quickquip

2022/04/13 02:01

なるほど、理解しました。ジョブを投げる方の起動に python -m scoop メインコード しないといけないってことですね。(ワーカの起動の話だと思っていました)
alfald

2022/04/13 02:25

そうです。 説明不足で申し訳ありません。
guest

回答1

0

ベストアンサー

以下はいかがでしょうか?
一応要望は満たせると思います。

  • redisサーバを立てる
  • Flaskからredisにメッセージをpublishする(pub-subなのでメッセージ(チャンネル?)100個分publishする)
    Flask側にはreturnが必要なので、publishした時点で「受け付けました」とかを表示しておく。
  • 分散処理用のサーバを100個作る。
  • サーバに対応したメッセージをsubscribeするアプリを作成し、メッセージを受信したら受信したメッセージに従い処理する(サーバ1のアプリは'message1'をsubscribeし、サーバ2のアプリは'message2'をsubscribeするようなイメージ)
  • 結果はredisに書き込み、Flask側から読み取れるようにする
  • 終わったかどうかを確認できるページを用意して、redisの内容から判断する
  • 結合処理は別途「判断ページ」とかに作っておいたり、別ページ作ったり、そちらで実行する(結合も長い場合は、redisで状態管理してそれを閲覧するページを作ったりする。)

ちなみに、上だとredisに直接投げてますが、celoryとかを使って処理を全部queue管理とかすればシーケンシャルに分割->結合とかも処理できると思います。
面倒そうですが・・・。

投稿2022/04/14 04:35

FiroProchainezo

総合スコア2387

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

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

alfald

2022/04/15 00:01

ありがとうございます。 提案していただいた内容で構築を行ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問