1つの並行プログラミング
1.1コンセプト
1.1.1並行プログラミング
同期は、複数のタスクを実行します
シングルコアCPUの場合、および並行プログラミングの真の意味を実現することはできません注:
1.2プロセス
プログラムのインスタンスを実行します
各プロセスは、独自のアドレス空間、メモリ、データマートや補助データを持っています
1.3スレッド
同じプロセス内で、並列制御フローによって活性化することができます
同じコンテキストを共有する(アドレス空間、データ構造)
特長:コミュニケーションと情報の共有を促進します
違いスレッドの実行順序が異なる結果につながる可能性
1.4 Pythonのグローバルインタプリタ(GIL)
特徴:仮想マシン(インタプリタメインループ)によってコード制御
唯一のメインループ制御スレッドの実行
Pythonインタプリタの特性ではなく、言語機能
注:データ集約型の場合、処理は、Cなどの言語、又はマルチプロセスを使用することができる、及び集中I / O集中するため、必要はありません
2マルチスレッド
2.1 _threadモジュール
2.1.1特長
プロセス制御機構の終わりはありません
唯一の同期プリミティブ
注意:このモジュールは廃止されているアンダースコアの代表で始まります
2.1.2構文
輸入_threadの _thread.start_new_thread(機能、引数、 ** kwargsから=なし)
スレッドの機能を実行するように、引数がパラメータの関数としてタプルの形式で記述する必要がある機能、パラメータ
2.2 .threadingモジュール
2.2.1建設スレッド
threading.thread(目標=関数、agrs =パラメータ)
注意:runメソッドをオーバーライドしたクラス派生スレッドをカスタマイズする方法があります
方法2.2.2スレッド
.start()スレッドを開始
.join()は、メインスレッドの待ち時間が必要です
.nameのスレッド名
2.2.3は、現在のスレッドを取得します。
threading.current_threadは()現在のスレッドを取得します。
2.2.4同期プリミティブ:ロック
ロック名= Threading.Lock()が定義されています
ロック名.require()を取得します
ロック名.release()リリース
注:ロック名で、操作のコンテキストをサポートしています:
3キュー
3.1モジュール
キューモジュール、キュー(FIFO)に、LifoQueue(LIFO)、優先度つきキュー(プライオリティキュー)、等
3.2キューキュー
設定例:queue.Queue()
アイテムを置く:.put(アイテム、ブロック= Trueの場合、タイムアウト=なし)
データ項目アウト:に.get(ブロック= Trueの場合、タイムアウト=なし)
処理された現在のミッションステートメントキュー:.task_done()
キューがキューをブロックする前に処理すべての項目:.join()
4マルチプロセッシングモジュール
4.1説明
なぜならグローバルインタプリタロックの有無のPythonでは、メインプログラムは、プロセス上に存在することができます。とI / O処理のために、インタプリタはすぐに処理のpythonを行うのに適している、ロックを解除し、それはPythonであれば、データ集約型のため、処理のための低レベルの言語を使用する必要があり、マルチプロセッシングモジュール処理、マルチコアCPUの能力をフルに活用。
4.2リファレンス
インポートマルチプロセッシング
4.3方法
そして、スレッドは非常に似ている、主な方法は次のとおりです。
multiprocessing.Process(目標=関数、agrs =パラメーター)構築プロセス
プロセスを開始するプロセス名.start()
プロセス名.join()はメイン処理要求を待ちます
.nameの取得プロセス名
multiprocessing.current_process()は、現在のプロセスを取得します
5 concurrent.futures模块
5.1説明
このモジュールは、集中されたマルチスレッドおよびマルチプロセスオペレーションに相当した後、このモジュールは、行くことができるマルチスレッドおよびマルチプロセスの使用をインポートします。
5.2 concurrent.futuresは、複数のスレッドやプロセスを使用します
インポートconcurrent.futures concurrent.futures.ThreadPoolExecutor(max_workers持つ = :エグゼキュータとして数量) executor.submit(函数名、参数)
注:マルチプロセス、マルチスレッドターゲットとargsに記入する必要がない、別に定義されています
6デコレータ
6.1特長
より明確な構文
より良いコードの整合性
より良いコードの保守
注:クラス定義とデコレータに装飾的な関数の定義
6.2指定された変数の場合、この時点で、状況に応じて異なる機能を実行する必要があれば、ネストされたテーブルまたは辞書、推奨委託を使用して実装することができます
6.3関数定義のデコレータ
主な機能:
デフ挨拶(名): プリント(名)
現在、いくつかの変更を加えることが所望の機能を入力して、プラスハロー
デフpre_add(楽しい): デフ CCC(* argsを、** kwargsから): リターン 'こんにちは' +楽しい(* argsを、** kwargsから) 戻り CCC
増加@pre_addフィールドの本来の機能の前には、ハローの名前をグリーティング機能意志の出力を呼び出します
6.4クラス定義のデコレータ
主な機能:
デフ挨拶(名): プリント(名)
現在、いくつかの変更を加えることが所望の機能を入力して、プラスハロー
クラスPP(): デフ __init__ (自己、FUNC): self.func = FUNC デフ __call__(自己、* agrs、** kwargsから): リターン 'こんにちは' + self.func(* argsを、** kwagrs)
増加@ppフィールドの本来の機能の前には、ハローの名前をグリーティング機能意志の出力を呼び出します
注:クラスA装飾機能及び装飾使用は、装飾煩わしいのクラスのクラスメソッドデコレータながら、正常な機能及びクラスメソッドを使用することができるためデコレータ装飾の関数として、関数デコレータを使用することが推奨されます。
6.5パラメータ化デコレータ
入力パラメータにネストされた関数デコレータ外部関数です。