2016-10-20 19 views
1

多くの接続を受信できるWebサーバーを作成しようとしています。これらの10000人の接続ユーザーはサーバー番号に送信され、サーバーはこれらの2乗数字をユーザーに返します。 10000接続が多すぎるため、ここでは非同期的なアプローチが適切です。どのPythonライブラリを使用しますか? SocketServerまたはAsyncio?

我々は非同期ハンドラとしてThreadingMixInとはForkingMixInクラスを使用することができますsocketserverライブラリと

asyncio & socketserver: は私が助けることができるのPython 3.4のための2つのライブラリを見つけました。しかし、これはコアの数によって制限されます。 一方、asyncioライブラリがあります。そして、私はそれがいかに正確に機能するのか理解していません。 どちらを使用しますか?そして、これら2つの図書館は一緒に働くことができますか

答えて

5

非同期プログラミングにはさまざまなアプローチがあります。

第1のアプローチは、スレッドを使用してIO操作を監視し、これらの操作を非ブロッキングの方法で管理する方法です。これは何ですかSocketServerします。

2番目の方法は、イベントループとselectorを使用してメインスレッドのIO操作を監視することです。これは通常、人々が非同期プログラミングについて話すときに意味するものであり、それはasynciotwisted、およびgeventのようなものです。コールバックは、それがクライアントごとに1つのスレッドを作成するオーバーヘッドを取り除く同じスレッド

  • で実行されているので、それは競合状態の危険性を制限

    • シングルスレッドのアプローチは、2つの利点があります(10K problem参照)

    ここにはasyncio TCP server (for python 3.5)の例があります。あなたのケースでは、単に独自の実装でhandle_echoコルーチンを置き換える:

    async def handle_client(reader, writer): 
        data = await reader.readline() 
        result = int(data.decode().strip()) ** 2 
        writer.write(str(result)).encode()) 
        writer.close() 
    

    簡単に数千のクライアントを処理できる必要があります。

  • 関連する問題