1

非常に単純な TCP サーバー (Python で) を構築しました。クエリを実行すると、スクリプトを実行しているホスト OS のさまざまなシステム レベルの統計情報が返されます。

Python とその利用可能なライブラリの知識を得るという私の実験と目標の一環として。a) 別の TCP ソケットにバインドする、b) LAN からのリモート接続を受け入れる、c) 接続したユーザーがさまざまなコマンドを発行できるようにする管理インターフェイスを構築したいと考えています。Varnish アプリケーションは、同様の管理機能を提供するツールの例です。

スレッドに関する私の知識は限られているため、次のようなことを達成する方法についての指針を探しています。

ユーザーは管理ポート (telnet remote.host 12111) に接続し、「SET LOGGING DEBUG」または「STOP SERVICE」を発行します。

私の混乱は、スレッド間でデータを共有する方法に関連しています。たとえば thread-1 でサービスが開始されている場合、そのスレッドからデータにアクセスするにはどうすればよいですか?

または、そのような機能を提供する Python アプリケーションのリストが非常に役立ちます。彼らのアイデアを再利用するために、私は喜んでコードを調べます。

4

3 に答える 3

1

Python には、いくつかのマルチスレッド サーバー ( SocketServerBaseHTTPServerxmlrpclib) が含まれています。Twisted も見てみたいと思うかもしれません。これはネットワーキングのための強力なフレームワークです。

于 2010-11-14T19:11:33.980 に答える
0

おそらく最も簡単な出発点は、Python の xmlrpclib です。

スレッドに関しては、すべてのスレッドが Python プログラムのすべてのデータを読み取ることができます。一度に 1 つのスレッドだけが特定のオブジェクトを変更できるため、リストや辞書などのプリミティブは常に一貫した状態になります。複数のプリミティブを含むデータ構造 (つまり、クラス オブジェクト) には、もう少し注意が必要です。スレッド間で調整する最も安全な方法は、Queue.Queue などを介してスレッド間でメッセージ/コマンドを渡すことです。これは常に最も効率的な方法ではありませんが、問題が発生する可能性ははるかに低くなります。

于 2010-11-14T19:05:43.080 に答える
0

マルチプロセッシングライブラリを最大限に活用してください。これは、並列計算 (キュー、パイプなど) の機能の完全なセットを提供します。Python でのマルチスレッド化は、 GILに伴う制限により効率的ではありません。

multiprocessing は、threading モジュールと同様の API を使用してプロセスの生成をサポートするパッケージです。マルチプロセッシング パッケージは、ローカルとリモートの両方の同時実行性を提供し、スレッドの代わりにサブプロセスを使用してグローバル インタープリター ロックを効果的に回避します。このため、マルチプロセッシング モジュールを使用すると、プログラマは特定のマシンで複数のプロセッサを完全に活用できます。Unix と Windows の両方で動作します。

GIL は、マルチスレッド CPython プログラムが特定の状況でマルチプロセッサ システムを最大限に活用することを妨げるため、物議を醸しています。

于 2010-11-14T21:09:35.830 に答える