回答編集履歴
2
typoの修正
answer
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
質問の「バックグラウンド処理」にどのような動作を期待しているのかよくわからないので、そこから。
|
2
2
|
|
3
3
|
1. 時間のかかる処理を実施するときに、その処理を別プロセスにまかせてさっさと次の処理ができるようにする。
|
4
|
-
※ 応答がすぐに返
|
4
|
+
※ 応答がすぐに返るのでクライアントは待たされないが、処理が終っていないので処理結果はわからない。
|
5
5
|
2. Webサーバが複数のリクエストを同時に処理できるようにする。
|
6
6
|
※ 長い時間の処理をするときにはクライアントは待たされる。
|
7
7
|
|
@@ -21,5 +21,5 @@
|
|
21
21
|
|
22
22
|
**2の場合**
|
23
23
|
確認で複数ブラウザを使っているところを見ると、2のように複数の要求を同時に受けらるようにするのが目的のようにも見えます。だとすると、実現方法が異なります。
|
24
|
-
bottleをマルチスレッド対応にするモジュールpasteを導入するか、
|
24
|
+
bottleをマルチスレッド対応にするモジュールpasteを導入するか、gunicornなどのwsgiサーバを導入してそちらのworke経由で動かすかでしょうか。
|
25
25
|
たとえば10こスレッドを作っておけば、10このリクエストを同時に処理できます。別のブラウザから/runに10個同時にアクセスするとすべてすぐにうけつけられて、すべて10秒後に応答が返るようになります。
|
1
文言修正
answer
CHANGED
@@ -1,23 +1,25 @@
|
|
1
|
-
質問の「バックグラウンド処理」
|
1
|
+
質問の「バックグラウンド処理」にどのような動作を期待しているのかよくわからないので、そこから。
|
2
2
|
|
3
|
-
1. 時間のかかる処理を実施するときに、その処理を別プロセスにまかせて処理する。
|
3
|
+
1. 時間のかかる処理を実施するときに、その処理を別プロセスにまかせてさっさと次の処理ができるようにする。
|
4
|
-
※ 応答がすぐに返ります
|
4
|
+
※ 応答がすぐに返りますので、クライアントは待たされないが、処理が終っていないので、結果はわからない。
|
5
5
|
2. Webサーバが複数のリクエストを同時に処理できるようにする。
|
6
6
|
※ 長い時間の処理をするときにはクライアントは待たされる。
|
7
7
|
|
8
8
|
**1の場合**
|
9
|
-
バックグラウンド処理というと、普通は1でしょうね。
|
10
|
-
提示された処理(リンク先のサイトも
|
9
|
+
バックグラウンド処理というと、普通はこっちでしょうね。提示された処理(リンク先のサイト)もこういう動作を実現するための処理のように見えますが、そうなっていません。
|
11
10
|
|
12
11
|
```python
|
13
12
|
app.process.start()
|
14
13
|
app.process.join()
|
15
14
|
```
|
16
|
-
1行目で別プロセスの処理を起動していますが、2行目で終了を待ち合わせている
|
15
|
+
1行目で別プロセスの処理を起動していますが、2行目で終了を待ち合わせています。 処理が終るまでjoin()は戻らないのでクライアントは10秒またされてしまいます。
|
16
|
+
また、その間、他のHTTP要求に答えられません。
|
17
17
|
|
18
|
-
|
18
|
+
1のような処理をbottleで実現するにはどうするのが一般的か、ちょっと調べてみたのですがわかりませんでした。
|
19
|
+
FlaskならCeleryを使ったりします。
|
19
20
|
|
20
21
|
|
21
22
|
**2の場合**
|
22
|
-
|
23
|
+
確認で複数ブラウザを使っているところを見ると、2のように複数の要求を同時に受けらるようにするのが目的のようにも見えます。だとすると、実現方法が異なります。
|
23
|
-
bottleをマルチスレッド対応にするモジュールpasteを導入するか、gnicornなどのwsgiサーバを導入してそちらのworke経由で動かすかでしょうか。
|
24
|
+
bottleをマルチスレッド対応にするモジュールpasteを導入するか、gnicornなどのwsgiサーバを導入してそちらのworke経由で動かすかでしょうか。
|
25
|
+
たとえば10こスレッドを作っておけば、10このリクエストを同時に処理できます。別のブラウザから/runに10個同時にアクセスするとすべてすぐにうけつけられて、すべて10秒後に応答が返るようになります。
|