Python でスレッド化とマルチプロセッシングを学びたいです。このためにどのようなプロジェクトを取り上げるべきかわかりません。
ロック、ミューテックス、条件、セマフォなど、関連するすべてのオブジェクトを処理できるようにしたいと考えています。
私に最適なプロジェクト タイプを提案してください。
PS プロジェクトに加えて、スレッド化された実装がどれほど優れているかを評価できるように、アプリをデバッグ/プロファイリング/負荷テストするためのツールを提案してください。
Python でスレッド化とマルチプロセッシングを学びたいです。このためにどのようなプロジェクトを取り上げるべきかわかりません。
ロック、ミューテックス、条件、セマフォなど、関連するすべてのオブジェクトを処理できるようにしたいと考えています。
私に最適なプロジェクト タイプを提案してください。
PS プロジェクトに加えて、スレッド化された実装がどれほど優れているかを評価できるように、アプリをデバッグ/プロファイリング/負荷テストするためのツールを提案してください。
いくつかのアイデア:
Web クローラー - キューを介してディスパッチャーから作業を取得するスレッドのプールを持ち、Web ページをダウンロードし、結果をどこかに返します。
チャット サーバー - ユーザーからの永続的な接続を受け入れ、メッセージを別のユーザーにディスパッチします。
mp3 ファイル オーガナイザー - mp3 タグ データから音楽ライブラリの構造を再構築し、それらをフォルダーに再編成します。一度に複数のスレッドを動作させることができます。
思いついたら、さらにいくつかのアイデアで編集します。
編集: Python はプロセスごとに 1 つの CPU に制限されているため、スレッドの数に関係なく、CPU を消費するものを並列化したい場合、スレッド化はどこにも行きません。multiprocessing
代わりにインターフェイスを使用してください。スレッド化 API とほぼ同じですが、ものをディスパッチしますより多くの CPU コアを使用できるサブプロセス。
非常に単純なデータベースサーバーをプログラムすることをお勧めします。各クライアントはサーバーに接続し、一連のエンティティに対して作成、読み取り、更新、削除を行うことができます。実装面では、サーバーはクライアントごとに1つのスレッドを持ち、すべてがロックを使用して保護されているエンティティのグローバルセットを操作している必要があります。
条件変数の使用方法を学習するために、サーバーは、エンティティが変更されたときにクライアントに通知できるようにする通知メソッドも実装する必要があります。
幸運を!
注:スレッドを使用することは、単純なデータベースサーバーをプログラムするための最も効率的な方法ではありませんが、自己改善のための優れたプロジェクトだと思います。