12日目のpython学習ノート

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パラメータ化デコレータ

        入力パラメータにネストされた関数デコレータ外部関数です。

おすすめ

転載: www.cnblogs.com/zhuome/p/11361654.html