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

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

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

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Flask

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

Python 3.x

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

Python

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

Q&A

解決済

1回答

411閲覧

pythonフレームワークにて待ちが発生してしまうのを解消したいです。

EzrealTrueshot

総合スコア388

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Flask

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/06/04 13:41

bottleやflaskやjaprontoなどのpythonフレームワークにてwebserverをたちあげて

同じパスに同時にアクセスすると待ちが発生してしまうのですが、これを解消する方法はありませんでしょうか?
例↓

import asyncio from japronto import Application # This is a synchronous handler. def synchronous(request): return request.Response(text='I am synchronous!') # This is an asynchronous handler, it spends most of the time in the event loop. # It wakes up every second 1 to print and finally returns after 3 seconds. # This does let other handlers to be executed in the same processes while # from the point of view of the client it took 3 seconds to complete. async def asynchronous(request): for i in range(1, 4): await asyncio.sleep(1) print(i, 'seconds elapsed') return request.Response(text='3 seconds elapsed') app = Application() r = app.router r.add_route('/sync', synchronous) r.add_route('/async', asynchronous) app.run()

AとBという人が2名いたときに
http://localhost:8080/async

このアドレスをほぼ同時にアクセスしたら(若干Aが先にアクセスしてる)
Bの人の画面が表示させるのが約6秒後になってしまいます。(Aがアクセスしたときの処理を待っている)

これをAもBも同時にアクセスしたときに各々が3秒後に表示されるようにするためにはどうしたらよろしいでしょうか?

nodejsのような環境ではなく、pythonの環境で実装させてみたいです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

GitHubのソースコードを見る限りでは、Application#runの引数にworker_numがあるので、ワーカー数を2以上に設定すればよいかと。

投稿2018/06/04 22:43

umyu

総合スコア5846

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

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

EzrealTrueshot

2018/06/06 00:27

ありがとうございます! workerを2に設定すると、3人目の人は同様に待ってしまいますよね。 workerの数をきにせずに実装するのは難しいですかね;
umyu

2018/06/06 01:06 編集

>EzrealTrueshotさんへ WEB側で待ち(sleep)がある作りというのがまずアレですが、 対応案として、できるかどうかは分かりませんが、 1,関数内で新規スレッドを起こす。 2,待ちがあるルーター(asynchronous)は別のプロセスとして分けてApplication#runする。 >実装するのは難しいですかね; フレームワークを使う限りでは、フレームワーク側のコードを読み解く必要があるので難しいのでは、あとPythonにはGIL( Global Interpreter Lock)があるので、その点も制限されるかと。まあ、物理CPU数の2倍のワーカー数をworker_numに設定するとかでしょうか。
EzrealTrueshot

2018/06/06 02:01

ありがとうございます! pythonはあきらめて、おとなしくnodejsで作ろうと思います。 助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問