ホームページ  >  記事  >  バックエンド開発  >  Pythonマルチスレッドプログラミングでjoin関数を使用した経験

Pythonマルチスレッドプログラミングでjoin関数を使用した経験

WBOY
WBOYオリジナル
2016-06-16 08:42:121064ブラウズ

今日は新吉へバッグを買いに行きましたが、午後遅くに戻ってきましたが、吐き気と頭痛がありました。吐き気の原因は、朝にまずいものを食べた+乗り物酔い+帰ってきたときに自動車事故の現場を見たことが原因で、頭痛はおそらく灼熱の太陽とエアコンの組み合わせが原因でした。学習する時間も気力もありません。このブログでは Python の小さな関数について話します。

チートスクールの専門上、先生はマルチスレッドプログラミングを教えたことがなく、マルチスレッドの概念も漠然と教えられていたので、私もPython初心者だったので、マルチスレッドに遭遇したときは唖然としました。他の人はそれを使っていますが、私は便利な結合関数を理解できません。朝、新吉に行く途中でこの問題のことを考えて吐き気がしましたが、帰ってからもコードを書いてテストし続け、ようやくある程度理解できました(Pythonの公式の英語の説明は理解できませんでした)。ネチズンの説明は十分に詳細ではなかったので、自分で理解する必要がありました)。
テストに使用したコードは次のとおりです:

コードをコピー コードは次のとおりです:

# コーディング: utf-8

# マルチスレッドで結合関数をテストします

インポートスレッド、時間
def doWaiting():
Print 'startwaiting1: ' + time.strftime('%H:%M:%S') + "n"
time.sleep(3)
Print 'stop wait1: ' + time.strftime('%H:%M:%S') + "n"
def doWaiting1():
Print 'startwaiting2: ' + time.strftime('%H:%M:%S') + "n"
time.sleep(8)
Print 'stop wait2: ', time.strftime('%H:%M:%S') + "n"
tsk = []
thread1 = threading.Thread(target = doWaiting)
thread1.start()
tsk.append(thread1)
thread2 = threading.Thread(target = doWaiting1)
thread2.start()
tsk.append(thread2)
print '結合開始: ' + time.strftime('%H:%M:%S') + "n"
tt の tsk:
tt.join()
print '終了結合: ' + time.strftime('%H:%M:%S') + "n"

この小さなプログラムは、thread1 と thread2 の 2 つのスレッドを使用します。スレッドによって実行されるアクションは、それぞれ doWaiting() と doWaiting1() です。関数本体は、print "start" + 3 秒間のスリープ + print "end" です。それぞれに付加された時刻。プログラムの実行プロセスを表示するために使用されます。その後、start() メソッドを使用して、2 つのスレッドの実行を同期的に開始します。次に、ループが開始され、2 つのスレッドの join() メソッドが呼び出されます。この前後で、print 関数が開始と終了をマークするために使用されます。主に tsk: tt.join() の tt を観察します。

join() がパラメータを取らない場合、実行は次のようになります:

ご覧のとおり、2 つのスレッドが並行して実行されます。プロセス 1 は 3 秒後に終了し、プロセス 2 は 8 秒後に終了します。その後、メイン プロセスに戻り、「end join」が出力されます。

次のパラメータは 2 秒のタイムアウト、つまり tt.join(2) に設定されており、実行は次のようになります:

2 つのスレッドが同時に実行を開始し、スレッド 1 の join(2) を実行し、スレッド 1 の実行を 2 秒待って無視し、スレッド 2 の join(2) を実行し、スレッド 2 の実行を 2 秒待機します。秒後、無視します (このプロセス中に、スレッド 1 の実行が終了し、スレッド 1 の終了情報が出力されます)、メイン プロセスの実行が開始され、「end join」が出力されます。スレッド 2 の実行は 4 秒後に終了します。

要約すると:

1. join メソッドの機能は、メインプロセスをブロックし (結合後のステートメントを実行できなくなる)、マルチスレッドの実行に重点を置くことです。

2. マルチスレッドおよび複数の結合の場合、各スレッドの結合メソッドは順番に実行され、次の結合メソッドは前の結合メソッドが完了した後にのみ実行できます。

3. パラメータがない場合は、スレッドが終了するまで待ってから、次のスレッドの結合の実行を開始します。

4. パラメータを設定した後、スレッドを一定時間待機し、無視します (スレッドは終了しません)。いずれにしても、その後のメイン処理は実行可能であることを意味する。

最後に、パラメータが2の場合のプログラム実行フローチャートを添付します。orzは自分で描いたので分かりやすいです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。