daikiclimate
@daikiclimate (It dk)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

webにおいて「処理中です」というページに移動する

解決したいこと

web初心者です。
現在djangoでアプリ開発をしていますが、多分djangoに限った話ではないと思います。

現在、動画をアップロードして処理して返すというイメージのアプリを作ろうとしているのですが、
いかんせん、動画の処理に時間がかかります。
そのため、現状は
アップロードページ⇒(ブラウザがぐるぐる、アップロード&処理の実行)⇒結果のページ
と移行していきます。

ただ、画面が遷移しないので、ユーザー的にはうまくいっているかわからないので、
アップロードページ⇒結果のページ(動画id: xxxは処理中です。約n秒後に更新してください)⇒結果のページ(処理結果)

のようにしたいです。

ただ、この場合、webサーバー側では
アップロードページ⇒結果のページ(with 処理中)
         ⇒裏で動画の処理も行う
という2つのことを同時にする必要がある気がしています。

プログラムはどうしても上から下に落ちていく性質上、どのようにすると、2つの処理を同時にできるかを知りたいです。
あるいは、一般にどのように検索するとやり方ができるかを知りたいです。

自分で試したこと

皆目見当もついていない状況なのですが、

  1. 非同期処理?並列処理?
  2. 結果のページ(with 処理中)の最後のところに動画の処理を実行するメソッドを投入する?
    のようなことを思ったのですが、いまいちピンと来ていません
0

1Answer

現在、動画をアップロードして処理して返すというイメージのアプリを作ろうとしているのですが、いかんせん、動画の処理に時間がかかります。

ただ、画面が遷移しないので、ユーザー的にはうまくいっているかわからないので、
アップロードページ⇒結果のページ(動画id: xxxは処理中です。約n秒後に更新してください)⇒結果のページ(処理結果)のようにしたいです。

その「動画の処理」が何らかの方法で進捗状況を情報として提供できるものでないと「約n秒後に更新してください」ということをユーザーに知らせることはそもそもできないのですが、そこのところは可能なのでしょうか?

であれば、時間のかかる「動画の処理」のところは非同期(別スレッド)で実行し、ブラウザからはタイマーと ajax を使って定期的に進捗を問い合わせて、返ってきた結果で進捗を表示するということを思いつきます。

ただし、そもそもユーザーを長い時間待たせるという点がマズイし、技術的にもスレッドの管理など解決しなければならない問題が多々あると思います。

以前、そのような方法を考えたのですが、結局時間のかかる処理のところは Web アプリから切り離し、処理が終わったら別の手段(メールとか)でユーザーに通知するように方針変更たということがあります。

結局上の思いつきはボツになったのですが、その時考えた話をご参考までに紹介しておきます。

進捗状況の表示
http://surferonwww.info/BlogEngine/post/2015/12/28/show-progress-of-task-being-performed-at-server-side.aspx

0Like

Your answer might help someone💌