1. ホーム
  2. python

Pythonのスレッド化 [終了しました]。

2023-08-15 15:43:44

質問

Pythonでマルチスレッドアプリケーションを書くために使用されるモジュールは何ですか?言語が提供する基本的な並行処理機構は知っていますし、また スタックレスPython しかし、それらのそれぞれの長所と短所は何ですか?

どのように解決するのか?

複雑なものから順番に。

を使用します。 スレッディングモジュール

長所です。

  • 任意の関数 (実際には任意の呼び出し可能なもの) をそれ自身のスレッドで実行するのは本当に簡単です。 を独自のスレッドで実行できます。
  • データの共有は、簡単ではないにしても(ロックは決して簡単ではありません : )、少なくとも簡単です。 少なくとも簡単です。

短所です。

  • 前述のように by Juergen Python のスレッドは実際にはインタプリタ内の状態に同時にアクセスすることはできません(1つの大きなロック、悪名高き グローバルインタープリタロック .) このことが実際に意味するのは、スレッドは I/O 関連のタスク (ネットワーク、ディスクへの書き込みなど) には有用ですが、並列計算にはまったく役に立たないと言うことです。

を使用します。 マルチプロセシング モジュール

単純な使用例では、これはまさに threading を使うのと同じように見えますが、各タスクは独自のスレッドではなく、独自のプロセスで実行されます。 (ほとんど文字通りです。もしあなたが Eli の例 と置き換えると threadingmultiprocessing , Thread である。 Process であり Queue (モジュール)に multiprocessing.Queue であれば、問題なく実行できるはずです)。

長所です。

  • すべてのタスクで実際の同時実行が可能(グローバル インタープリタ ロックなし)。
  • マルチプロセッサへのスケールアップ。 マシン .

短所

  • プロセスはスレッドより遅いです。
  • プロセス間のデータ共有はスレッドより厄介です。
  • メモリは暗黙のうちに共有されることはありません。 明示的に共有するか、変数を pickle して送受信する必要があります。 これはより安全ですが、より困難です。 (もしそれがますます重要なら、Pythonの開発者はこの方向に人々を後押ししているようです)。

のようなイベントモデルを使用します。 ツイスト

長所

  • 何をいつ実行するかという優先順位を非常に細かく制御することができます。

短所。

  • たとえ良いライブラリがあったとしても、非同期プログラミングは通常スレッドプログラミングよりも難しく、何が起こることになっているかを理解する点でも、実際に起こっていることをデバッグする点でも難しいです。

すべて の場合 あなたはすでにマルチタスクに関わる多くの問題、特にタスク間でどのようにデータを共有するかという厄介な問題を理解していると仮定しています。 もし何らかの理由で、いつ、どのようにロックと条件を使うかわからない場合は、それらから始めなければなりません。 マルチタスクのコードは微妙で厄介なことがたくさんあるので、始める前にコンセプトをよく理解することが本当にベストです。