2013-08-30 3 views
10

私はFlaskマイクロフレームワークを使ってマルチスレッドのWebサーバーを実装しました。基本的に私のサーバーにはタスクキューとスレッドプールがあります。したがって、複数の要求を処理できます。 FlaskはPythonで実装されており、Pythonスレッドは本当に並行ではないので、私のWebアプリケーションは少し遅いです。真のマルチスレッドを実現するための代替フラスコ?

マルチスレッドの問題を解決するために、Flaskの代替手段はありますか?

+1

どのようにFlaskを導入していますか?それは、フラスコそのものではあまりありません。 –

+1

Pythonのマルチスレッド化は、あなたがしようとしていることに非常に適していることに注意してください。ビューの「遅れている」部分は、Webサービスやデータベース呼び出しなどのもの、またはリクエストごとにPythonプロセスを作成している不適切に設定されたWebサーバーです。実際の問題が何であっても、あなたが与えた詳細で解決するのを助けることが何であるかはわかりません。さらに、Flaskに代わるものを求めているのは、基本的にツールの推奨を求めているということです。これは、複数の可能な回答のためにStackOverflowが扱うように設計されている質問ではありません。 –

+0

あなたが言及したように、私はリクエストごとにプロセスを作成しています。しかし、Webサービスは別のバイナリとして実装されているTTS(text-to-speech)システムを公開しているため、避けることはできません。 TTSプロセスとやりとりするために、私はpexpectモジュールを使用しています。したがって、要求ごとに、スレッドプールからの既存の空きスレッドは、pexpectを使用してTTSプロセスを生成します。私はデザインが少し奇妙だと知っています。現在の実装http://sitspeech.iitkgp.ac.in/へのリンクです。私は現在のデザインを改善するための提案を感謝します。 – user2586432

答えて

7

これはFlaskの欠陥ではなく、Pythonインタプリタには制限があるため、使用するフレームワークにはそれが適用されます。

しかし、この問題を回避するには素晴らしい方法があります。真の同意を得るために、スレッドの代わりにプロセスプールを使用することができます。 multiprocessingモジュールは、スレッドモジュールのAPIと互換性のあるAPIを提供しますが、ワーカーの子プロセスを作成します。私はこのモジュールを使用してFlaskアプリケーションのバックグラウンドワーカーを作成し、非常にうまく動作することを確認しました。

22

私はこの質問に出くわしました。私はフラスコ(ほとんどのPython Webアプリケーションがであることを意味するがデプロイされることを意味していました)を指摘した人はいませんでした。参照:http://flask.pocoo.org/docs/deploying/#deployment

マイ好ま展開オプションがある超シンプルTornadoのLinux のWindows(上同様に動作私は、既存のウェブサイトと一緒にそれを展開、または既存のサイトの一部としても、ハイブリッド展開していた場合、I通常、IISアプリケーション要求ルーティング[ARR]を逆プロキシとして竜巻に使用します)。私はまた、両方の大きな成功とgeventを使用しました。

Tornadoは、FriendFeedを強化するスケーラブルなノンブロッキングWebサーバーとツールのオープンソースバージョンです。ノンブロッキングでepollを使用するため、数千の同時接続を処理できるため、リアルタイムのWebサービスに最適です。フラスコでこのサービスを統合することは簡単です:あなたのフラスコアプリケーションがyourapplication.pyである場合

そう、あなたがそうのようなアプリケーションを提供するために、別のと呼ばれるtornado_web.pyを作成し、それを使用する可能性があります:

from tornado.wsgi import WSGIContainer 
from tornado.httpserver import HTTPServer 
from tornado.ioloop import IOLoop 
from yourapplication import app 

http_server = HTTPServer(WSGIContainer(app)) 
http_server.listen(5000) 
IOLoop.instance().start() 

via:http://flask.pocoo.org/docs/deploying/wsgi-standalone/#tornado

+0

私はインストールしました私のアプリでは竜巻が(君たちの前に言ったように前進していますが)、フラスコのデフォルトのサーバーの有用なログを見逃していました。これは、コンソールで恋に落ちていて、竜巻でどうやってできるのか知っていますか? @アオロン –

関連する問題