Pythonマルチプロセスおよびマルチスレッドの基本

プロセスとスレッドの基本的な知識に関して、私は以前にいくつかの記事を共有し、以下にいくつかの基本的な知識を要約します(強調:よくあるインタビュー):

プロセスの実行ステータス

1 )新しい状態:プロセスは作成中であり、まだ準備完了状態になっていません。

2 )準備完了状態:すべての動作条件が満たされ、CPUを待機しています。

3 )実行ステータス(実行ウィンドウ):プロセスはプロセッサで実行されています。

4 )ブロッキング状態:プロセスはイベントを待機しており、一時停止されています。利用可能なリソースを待つ、入力と出力が完了するのを待つなど。プロセッサがアイドル状態であっても、プロセスは実行できません。

5 )死亡状態:プロセスがシステムから消えています。

プロセスの3つの基本的な状態は交換可能です

準備完了->実行:プロセスがプロセッサを取得すると、準備完了状態から実行状態に変わります。

実行->準備完了:プロセスからプロセッサが奪われたときに、システムによって割り当てられたタイムスライスが使い果たされると、他の上位レベルのプロセスが表示され、プロセスは実行状態から準備完了状態に変わります。

実行中->ブロック:要求されたリソースが占有されているなどのイベントのために実行中のプロセスがブロックされ、I / O送信の開始が完了しない場合、プロセスは実行中の状態からブロック状態に変わります。

ブロッキング->準備完了:待機イベントが発生したときに、要求されたリソースが取得されると、I / O送信が完了し、プロセスがブロッキングから準備完了状態に変わります。

Pythonで複数のプロセスを使用する方法

マルチプロセッシングモジュールを使用して、Pythonでプロセスを作成します

マルチプロセッシングモジュールは、プロセスオブジェクトを作成するためのProcessクラスを提供します。

Process([group],[target],[ name ],[args],[ kwargs])
group:プロセスグループを指定します。ほとんどの場合は使用されません。,通常、グループはなしにのみ割り当てることができます
ターゲット:関数の参照が渡された場合、子プロセスはここでコードを実行できます、ターゲット=関数名、関数名に括弧を含めることはできません
args:targetで指定された関数に渡されるパラメーターは、タプルとして渡されます。引数=(5,)、パラメータが1つしかない場合は、タプルを示すためにコンマを追加する必要があります
kwargs:名前付きパラメーターをターゲットで指定された関数に渡します。通常は辞書の形式でkwargsです。={"正式なパラメータ1":「実際のパラメータ1」、「正式なパラメータ2」:「実際のパラメータ2」}
name:プロセスの名前を設定します。設定する必要はありません

**Process ** ####によって作成されたインスタンスオブジェクトの一般的なメソッド

Processクラスを使用してマルチプロセスを作成します

# マルチプロセスモジュールをインポートする
import  multiprocessing
import os
def target_func():print("子プロセス名",multiprocessing.current_process().name)print("子プロセスPID:",os.getpid())print("子プロセスの親プロセスppid:",os.getppid())if __name__ =='__main__':for i inrange(3):
  # プロセスインスタンスを作成し、実行するターゲット関数を指定します
  p = multiprocessing.Process(target=target_func)
  p.start()#startメソッドを使用してプロセスを開始します
  p.join()#子プロセスが終了するのを待ちます
  print("メインプロセスpid:",os.getpid())
 出力:
子プロセス名プロセス-1
子プロセスPID:3708
子プロセスの親プロセスppid:4256
メインプロセスpid:4256
子プロセス名プロセス-2
子プロセスPID:8460
子プロセスの親プロセスppid:4256
メインプロセスpid:4256
子プロセス名プロセス-3
子プロセスPID:4468
子プロセスの親プロセスppid:4256
メインプロセスpid:4256

Pythonでマルチスレッドを使用する方法

pythonでは、スレッドモジュールはプログラムのマルチスレッド操作に使用されます。スレッドモジュールは、スレッドを作成するためのThreadクラスを提供します。

1. ターゲットはスレッド実行関数の名前であり、関数名の後に括弧はありません。

2. args:関数を実行するために必要なパラメーター。このパラメーターはタプルの形式で渡す必要があります。要素が1つしかない場合は、コンマを忘れないでください。

3. kwargs:関数を実行するために必要なパラメーター。このパラメーターは辞書で渡す必要があります

Threadクラスは、次のメソッドを提供します:run():スレッドアクティビティを表すために使用されるメソッド。
start():スレッドアクティビティを開始します。
join([time]):スレッドが終了するまで待機し、開始されたスレッドが終了するまでハングします。タイムアウト(秒)が指定されない限り、スレッドはブロックされたままになります。
isAlive():スレッドがアクティブかどうかを返します。
getName():スレッド名を返します。
setName():スレッド名を設定します。

スレッド化の一般的な方法と属性:
threading.currentThread():現在のスレッド変数を返します。
threading.enumerate():実行中のスレッドのリストを返します。実行とは、開始後および終了前のスレッドを指します。開始前および終了後のスレッドは除きます。
threading.activeCount():現在アクティブなスレッドの数、1つのメインスレッドを返します+n個の子スレッド。

マルチスレッドの簡単な使用

import threading #マルチスレッドモジュールをインポートする

def eat():print('食べる')print('スレッド名%s'%threading.current_thread().name)
def dance():print('踊っている')print('スレッド名%s'%threading.current_thread().name)
def song():print('歌う')print('スレッド名%s'%threading.current_thread().name)if __name__ =='__main__':

 thread =[] #スレッドを保存するための空のリストを定義する
 t1 = threading.Thread(target=eat,args=('')) #最初のスレッドを定義する
 t2 = threading.Thread(target=dance,args=('')) #2番目のスレッドを定義します
 t3 = threading.Thread(target=song,args=('')) #3番目のスレッドを定義します
 thread.append(t1) #リストにスレッドを順番に追加します
 thread.append(t2)
 thread.append(t3)for i in thread:
  i.start() #すべてのスレッドを順番に開始します
 for i in thread:
  i.join()  #すべてのスレッドを保護する

出力:
食べる
スレッド名スレッド-1
踊っている
スレッド名スレッド-2
歌う
スレッド名スレッド-3

Recommended Posts

Pythonマルチプロセスおよびマルチスレッドの基本
Pythonの基本
Pythonの基本2
Pythonの基本
Pythonの基本3
Pythonの基本4
Pythonの基本5
Python and Go
Pythonオブジェクト指向の基本
Pythonの内省と考察
Pythonカスタム関数の基本
[python] ubuntuの下のpython2とpython3
Python構文の基本
Pythonの分解とパッケージ化
Python3の構成とentry.md
Pythonの自動操作とメンテナンス2
Pythonの紹介と環境のインストール
Pythonはクローラーとアンチクローラーを知っています
centos7はpython3とipythonをインストールします
Centos6.10はpythonとyumを再インストールします
Pythonオープン読み取りおよび書き込み
CentOS7はpython3とpip3をインストールします
Pythonのデータ構造とアルゴリズム
CentOS6.9はpythonをコンパイルしてインストールします
CentOS6はpython3をコンパイルしてインストールします
Pythonのジェネレーターとイテレーター
Pythonファイルの読み取りおよび書き込み操作
Pythonとjsのインタラクティブな呼び出しメソッド
魔法の方法とPythonの使用
Pythonは正と負の数を判断します
pythonftpアップロードファイルとフォルダー
Pythonクローラー|コグニティブクローラーのリクエストとレスポンス
Pythonは文字列と数値のスプライシングを実装します
Python関数の定義とパラメーターの説明
CentOSはPython3とpip3をすばやくインストールします
pythonクローラーのMongodbとpythonの相互作用
Python3をインストールし、CentOS8でansible
PDFおよびCDFの例を処理するPython
株で遊んでPythonを学んだ
centos7でpython3環境を構成し、
Pythonはjsonファイルを読み書きします
Pythonはユーザー名とパスワードの検証を実装しています
CentOS7の下にPython3とPyをインストールします
Linuxの基本(Ubuntuのコピーと貼り付け)
Pythonの基本的な構文と数値タイプ
Python学習OSモジュールと使用法