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

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

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

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

Python

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

API

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

2回答

1731閲覧

Flaskのdef関数内でreturn後に別の処理を実行させることはできますか?

fujimaruuuun

総合スコア22

Flask

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

Python

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

API

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2022/08/05 03:50

編集2022/08/05 04:02

前提

ReactとFlaskでサイトを制作しています
Reactから登録したいキーワードをFlaskへ送り、テーブル登録とは別に、重たい処理が実行されます。返却値がFlaskから返ってくるまで、画面ではローディングを出しています。

この”重たい処理”が2,3分ほどかかるとき、その間ローディング画面で待たせるのはおかしいと思うのですが、このような時どういう実装をしたらいいのでしょうか。

自分で想像している実装方法はこの3つです。

Flaskのdef関数内で、一度テーブル登録された段階でフロントにreturnを返した後、重たい処理を継続させる。
(returnは終了の合図のようなものだとおもっているのでそもそもreturnした後になにか別の関数を実行させることはできるのかな?とは思いつつ、デコレータとかを使ってどうにかできないのかなと)


Reactから、登録のリクエストと重たい処理へのリクエストを別で投げる
今は一度に登録と重たい処理をやってしまおうとしているので2回リクエストを投げて登録完了の合図だけをReact側に知らせる


React側でFlaskからの返却値を待たずに、あたかも登録できましたという画面にする。
(Flaskでエラーでたときなにもわからないので少し心配)

大変初歩的な質問かと思いますがお力添えのほどよろしくお願いします。。
一般的にはこう実装するよ、など教えていただきますと幸いでございます。

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

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

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

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

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

hoshi-takanori

2022/08/06 08:21

バックグラウンドで動くタスクを管理して、その進捗を見れるようにするとか。 でも、その重たい処理が何のためのものか、例えば ・登録したユーザー個人のためにデータを処理して、そのユーザーだけに結果を返す ・登録されたデータに基づいてサイト全体の内容が更新される のどれかによってもやり方は変わるかも…。タスク実行中に別のデータが登録されたらどうする? とか。
fujimaruuuun

2022/09/02 02:48

遅くなりまして大変申し訳ありません ・登録したユーザー個人のためにデータを処理して、そのユーザーだけに結果を返す の方で実装したかったのですが、その重たい処理がサイト全体でとても負荷のかかるものだったため結局夜間時に実行させることにしました。たしかにタスク実行中に別の処理が発火したらという状況もありえますね、、
guest

回答2

0

ベストアンサー

処理をするときに、とりあえず受け付けたみたいなのを出して、後ろでやらせておくみたいなのをやりたい場合は、Celeryを使うと良いと思います。

Flaskドキュメント中のCeleryの記述は以下です。
Celery Background Tasks

Celeryのドキュメントはたぶん以下です。
https://docs.celeryq.dev/en/stable/getting-started/introduction.html

凄くとっつきにくいですが、使いこなせばできるんじゃないかと思います。

投稿2022/08/09 07:17

FiroProchainezo

総合スコア2401

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

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

fujimaruuuun

2022/09/02 02:50

Celeryというものがあるのですね、ドキュメントまで添付していただきありがとうございます! 今回は重たい処理は別で夜間に実行させることにしましたが、今後の実装に参考にさせていただきます
guest

0

その重たい処理をしている間はあなたはどういうふうにしたいんでしょう。
まずはそれを考える必要があります

③のようにしたいのであれば、そう実装すればいいだけですが、あたかも登録できましたという画面にしたあとその処理が終わるまで2,3分画面がフリーズする、あるいはその画面で無応答になるというのはいいんでしょうか。

投稿2022/08/05 04:09

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問