2016-09-07 4 views
2

のPythonに基づいてWebサービスで複数のコアを使用するにはamazon t2.mediumインスタンスで毎秒。しかし、私がトップを使ってサーバーをチェックすると、CPUの100%しか使用しません。私はアマゾンt2.mediumのインスタンスは2CPUを持っているべきだと思うので、可能なすべてのCPUを使い、うまくいけばより多くのリクエストを処理するためにWebサービスコードを変更する方法があるのだろうか。どのようにそれは、約70の要求を処理することができ、私はストレスが私のサービスをテストしていこの段階でクラインフレームワーク</p> <p><a href="https://klein.readthedocs.io/en/latest/index.html" rel="nofollow">https://klein.readthedocs.io/en/latest/index.html</a></p> <p>に基づいてWebサービスを書いていクライン

私はPythonドキュメントを読んでmultiprocessingモジュールを見つけましたが、それが正しい解決策であるかどうかはわかりません。今、私のウェブサービスの主な機能は、

APP = Klein() 
if __name__ == "__main__": 
    APP.run("0.0.0.0", SERVER_PORT) 

でこのサービスが着信要求を処理するために、複数のCPUを使用することができるというようにするにまっすぐ進むの修正はありますか?質問を読んでいただきありがとうございます。

答えて

1

確かにmultiprocessingを使用することは可能ですし、プロセスをスピンアップするのは簡単です。

from multiprocessing import Process 
from klein import Klein 

def runserver(interface, port, logFile): 
    app = Klein() 
    @app.route('/') 
    def heyEarth(request): 
     return 'Hey Earth!' 
    app.run(interface, port, logFile) 

process_list = [] 
for x, port in enumerate([8000, 8001, 8002, 8003]): 
    logfilename = open('localhost' + str(port) + '.log', 'a') 
    process_list.append(Process(target=runserver, args=('localhost', port, logfilename))) 
    process_list[x].daemon = True 
    process_list[x].start() 

process_list.pop().join() 

エンタープライズ環境では、nginxのような専用のロードバランサの後ろで実行するほうがますます信頼性が高くなります。したがって、上記のスニペットはWebサーバーの起動にのみ使用する必要があります。すべての負荷分散は専用のロードバランサで処理する必要があります。

デバッグや共有システムファイルのような基本的なことは、最小限に抑えてください。そして、それは "普通の"ものです。あなたが何が起こっているのか分からないので、誰もあなたを助けることができない、起こりうる異常なトンがあります。ちょうどこのスニペットを実行すると、私は信号とツイストでいくつかの奇妙なものに気づいた。 runserver()kleinのすべてのインポートを実行すると修正できると思います。

他人の間違いから学び、multiprocessingで焼かれた人の警告に気をつけて、お尻のアプリを作ってください!この情報がお役に立てば幸い:D

参照

- それはトルネードドキュメントですが、それはまだ
  • Multicore TwistedWebを助けるべきである - これは、コア開発者によってmultiprocessesに「ツイスト」アプローチです。 TwistedとSpawnのプロセスを実行しようとする人のために読んだだけの価値があります。
  • +0

    これらの余分なプロセスはすべて、同じポートを対象とするリクエストを処理するために使用されますか?または、常に複数のポートを使用する必要がありますか? – JLTChiu

    +0

    それが同じマシンにある場合は、別のポートにする必要があります(少なくとも私の実装では) –

    +0

    ありがとうございました。私は後でこれをチェックするかもしれない。 – JLTChiu

    関連する問題

     関連する問題