プロセスとスレッドの基本的な知識に関して、私は以前にいくつかの記事を共有し、以下にいくつかの基本的な知識を要約します(強調:よくあるインタビュー):
1 )新しい状態:プロセスは作成中であり、まだ準備完了状態になっていません。
2 )準備完了状態:すべての動作条件が満たされ、CPUを待機しています。
3 )実行ステータス(実行ウィンドウ):プロセスはプロセッサで実行されています。
4 )ブロッキング状態:プロセスはイベントを待機しており、一時停止されています。利用可能なリソースを待つ、入力と出力が完了するのを待つなど。プロセッサがアイドル状態であっても、プロセスは実行できません。
5 )死亡状態:プロセスがシステムから消えています。
準備完了->実行:プロセスがプロセッサを取得すると、準備完了状態から実行状態に変わります。
実行->準備完了:プロセスからプロセッサが奪われたときに、システムによって割り当てられたタイムスライスが使い果たされると、他の上位レベルのプロセスが表示され、プロセスは実行状態から準備完了状態に変わります。
実行中->ブロック:要求されたリソースが占有されているなどのイベントのために実行中のプロセスがブロックされ、I / O送信の開始が完了しない場合、プロセスは実行中の状態からブロック状態に変わります。
ブロッキング->準備完了:待機イベントが発生したときに、要求されたリソースが取得されると、I / O送信が完了し、プロセスがブロッキングから準備完了状態に変わります。
マルチプロセッシングモジュールは、プロセスオブジェクトを作成するためのProcessクラスを提供します。
Process([group],[target],[ name ],[args],[ kwargs])
group:プロセスグループを指定します。ほとんどの場合は使用されません。,通常、グループはなしにのみ割り当てることができます
ターゲット:関数の参照が渡された場合、子プロセスはここでコードを実行できます、ターゲット=関数名、関数名に括弧を含めることはできません
args:targetで指定された関数に渡されるパラメーターは、タプルとして渡されます。引数=(5,)、パラメータが1つしかない場合は、タプルを示すためにコンマを追加する必要があります
kwargs:名前付きパラメーターをターゲットで指定された関数に渡します。通常は辞書の形式でkwargsです。={"正式なパラメータ1":「実際のパラメータ1」、「正式なパラメータ2」:「実際のパラメータ2」}
name:プロセスの名前を設定します。設定する必要はありません
# マルチプロセスモジュールをインポートする
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では、スレッドモジュールはプログラムのマルチスレッド操作に使用されます。スレッドモジュールは、スレッドを作成するための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