Pythonマルチスレッドプログラミング学習ノート


Pythonマルチスレッドプログラミング学習ノート
文書ディレクトリ
  • Pythonマルチスレッドプログラミング学習ノート
  • は前の
  • に書いてあります
  • 1. マルチプロセス
  • 2. マルチスレッド
  • 3. 補足

  • 前に書く
  • ラーニングリンク:
  • 2時間pythonマルチスレッドプログラミング
  • Threading学会マルチスレッド(Pythonチュートリアルを煩わすな)

  • 1.マルチプロセス
  • マルチタスク
  • マルチタスクの利点:CPUリソースを十分に利用し、プログラムの実行効率を高める
  • マルチタスクとは、同一時間内に複数のタスクを実行する
  • である.
  • マルチタスクの表現形式
  • 同時実行:複数のタスクを一定期間交互に実行する
  • パラレル:複数のタスク
  • を実際に同時に同時に実行します.

  • プロセス
  • プロセス(Process)は、オペレーティングシステムがリソース割り当ておよびスケジューリング実行を行う基本単位
  • であるリソース割り当ての最小単位である.
  • プログラムには少なくとも1つのプロセスがあり、プログラムは静的であり、プロセスは動的
  • である.
  • マルチプロセスマルチタスクの完了
  • p = multiprocessing.Process(target, name, group)
  • p.start()開始プロセス
  • テスト
    from multiprocessing import Process
    import time
    
    
    #   
    def sing():
        for i in range(3):
            print('  ...')
            time.sleep(0.5)
    
    
    #   
    def dance():
        for i in range(3):
            print('  ...')
            time.sleep(0.5)
    
    
    if __name__ == '__main__':
        p1 = Process(target=sing)
        p2 = Process(target=dance)
    
        p1.start()
        p2.start()
    
  • プロセスは、パラメータ付きのタスクを実行します.
  • argsパラメータの使用
  • kwargsパラメータの使用
    from multiprocessing import Process
    import time
    import os
    
    
    #   
    def sing(num):
        print('     pid:', os.getpid())
        print('      pid:', os.getppid())
        for i in range(num):
            print('  ...')
            time.sleep(0.5)
    
    
    #   
    def dance(num2):
        print('     pid:', os.getpid())
        print('      pid:', os.getppid())
        for i in range(num2):
            print('  ...')
            time.sleep(0.5)
    
    
    if __name__ == '__main__':
        print('    pid:', os.getpid())
        p1 = Process(target=sing, args=(5,))
        p2 = Process(target=dance, kwargs={
             'num2': 2})
    
        p1.start()
        p2.start()
    
  • 取得プロセスの番号
  • 現在のプロセスの番号を取得する:os.getpid()
  • 現在の親プロセスの番号:os.getppid()
  • を取得
  • プロセスの注意点
  • メインプロセスは、すべてのサブプロセスの実行が終了するのを待ってから
  • を終了する.
  • デーモンマスタープロセスを設定:マスタープロセスはサブプロセスの終了を待たずにサブプロセスオブジェクトを終了する.daemon = True


  • 2.マルチスレッド
  • なぜマルチスレッドを使用するのか:プロセスはリソースを割り当てる最小単位であり、プロセスを作成すると一定のリソースが割り当てられます.スレッドはプログラム実行の最小単位であり、1つのプロセスに少なくとも1つのスレッドがプログラムを実行する.スレッド自体はシステムリソースを持たず、同じプロセスに属する他のスレッドとプロセスが所有するすべてのリソースを共有できます.
  • マルチスレッドはマルチタスクを完了します.プロセスの一毛と同じですが、モジュールが違います.from threading import Thread
  • スレッドはパラメータ付きのタスクを実行します:プロセスの一毛と同じ
  • メインスレッドとサブスレッドの終了順序:プロセスの一毛と同じようにデーモンスレッドを設定する方法は2つあります.
  • 作成時にdaemonパラメータ
  • を渡す
  • 作成後、daemon
  • を設定
  • スレッド間の実行順序
  • スレッド間の実行は無秩序であり、CPUスケジューリング
  • によって行う.
  • 現在のスレッド情報を取得する:threading.current_thread()
  • プロセスとスレッドの比較
  • 関係の比較:
  • スレッドはプロセスに依存し、プロセスがなければスレッド
  • はありません.
  • プロセスのデフォルトでは、複数のスレッド
  • を作成できるスレッドが提供されます.
  • 違いの比較:
  • 作成プロセスのリソースオーバーヘッドは、スレッドを作成するリソースオーバーヘッドよりも
  • 大きい.
  • プロセスはオペレーティングシステムのリソース割り当ての基本単位であり、スレッドはCPUスケジューリングの基本単位
  • である.
  • スレッドは独立して実行することができず、プロセス中の
  • に依存しなければならない.
  • メリットとデメリットの比較:
  • プロセスのメリットとデメリット:メリット:マルチコア使用可能なデメリット:リソースオーバーヘッドが大きい
  • スレッドの長所と短所:利点:リソースオーバーヘッドの短所:マルチコア
  • を使用できない


    3.補充
  • join:スレッドの実行が完了するまで、プライマリ・スレッドの後の文を実行しません.
  • スレッドの戻りはreturnを使用できません.つまり、マルチスレッドの場合、returnで関数の戻り値を取得することはできません.戻り値を記録したリストを入力し、関数の結果をリストに入れる必要があります.
  • GILはPythonマルチスレッドの性能が私たちが予想したように制限されていません.GIL:グローバルインタプリタロック、Global Interpreter Lock.GILリファレンスリンク、リファレンスリンク2
  • GILロックの問題をどのように解決すればいいですか?
  • cpythonをjpythonに交換(推奨しない)
  • マルチプロセスを使用してマルチスレッドのタスクを完了する
  • マルチスレッドを使用する場合、c言語を使用して
  • を実現することができる.
  • はいつGILを解放しますか?
  • i/o操作のように時間が空いてcpuがアイドル状態になるとGil
  • が解放される.
  • には、ticksの値が100に達すると、Gilロックスレッド間でGilロックが競合し始める(説明:ticksという値は、Gilロックを取得するスレッドがcpuを使用する時間を延長または縮小するために設定することができる)
  • がカウントされます.
  • 相互反発ロックとGilロックの関係?
  • Gilロック:同じ時点でcpu
  • に1つのスレッドしか使用できないことを保証します.
  • 相互反発ロック:マルチスレッドの場合、共有データを修正する際の秩序ある修正を保証し、データ修正の混乱が発生しない
  • .

  • 相互反発ロックthreading.Lock()は、実行時にlock.acquire()が必要であり、終了後にlock.release()が必要であり、このようにロックされたスレッドが操作される.

  • 私のCSDN:https://blog.csdn.net/qq_21579045
    私のブログ園:https://www.cnblogs.com/lyjun/
    私のGithub:https://github.com/TinyHandsome
    紙の上で得たのは結局浅く感じて、この事は決してお辞儀をしなければならないことを知っています~
    皆さん、いらっしゃいませ.
    by李英俊ちゃん