数分でpythonマルチスレッドを取得

マルチスレッドとは

ここでは、計り知れない専門用語は言いません。つまり、入浴中にコーヒーを飲みます。つまり、効率を向上させる目的を達成するために、コードまたは関数の複数の領域をコード内で同時に実行します。

例えば

たとえば、そのようなゲームがあり、XiaoMingとXiaoHongは実行中のテストを行っており、現在はすべてタイミング用のタイマーがあります。これは彼らのテストです。以下のコードのように。

import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明我跑完了')

def print_hong():
    time.sleep(3)
    print('我是小红我跑完了')


print_ming()
print_hong()

time1=time.time()
print(time1-time0)

結果を見ることができます
ここに写真の説明を挿入

明らかに、テストを終了するのに約8秒を費やしました。ただし、すべてにタイマーがあるため、同時にテスト用にまとめることで効率を大幅に向上させることができます。

同時テスト

コードを入力し、次の変更を加えました。
スレッドのインポート
1スレッドの作成ming=threading.Thread(target=print_ming)
2誕生スレッドming.setDaemon(True)
3スレッドの実行ming.star()
変更されたコードは次のとおりです。



import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明')

def print_hong():
    time.sleep(3)
    print('我是小红')

ming=threading.Thread(target=print_ming)

hong=threading.Thread(target=print_hong)

ming.start()
hong.start()


print('执行完了')
time1=time.time()
print(time1-time0)

結果は次のとおりです。
ここに写真の説明を挿入
ショックが非常に速くなる可能性があります。明らかに、このプログラムまたはテストでは、XiaoMingとXiaoHongがまったく実行されなかったことがわかります。明らかに、メインプログラムは2つの関数(またはサブ関数)よりも高速に実行されるため、メインプログラムは実行が終了すると終了します。

誰が速く走りますか?

ここでは明らかに、2つの機能を待つためのメインプログラムが必要です。実行中のテスト中に高速で実行するコーチがいると想定できます。3人のうちの1人がエンドポイントに到達する限り、テストは終了します。それでは、速いランナーが遅いランナーを最初に待つようにすることを見てみましょう。
そのため、このようなコードを元々追加しました
。1スレッドの作成ming = threading.Thread(target = print_ming)
2スレッドの作成ming.setDaemon(True)
3スレッドの実行ming.star()
4スレッドのming.joinの待機()


import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明')

def print_hong():
    time.sleep(3)
    print('我是小红')

ming=threading.Thread(target=print_ming)

hong=threading.Thread(target=print_hong)

ming.start()
hong.start()
ming.join()

print('执行完了')
time1=time.time()
print(time1-time0)

結果は次のとおりです
ここに写真の説明を挿入
。XiaoMingが遅いことを恐れていることは明らかなので、Xiao Mingを待つようにみんなにお願いしますが、ming.join()
をhong.join()に変更すると、
ここに写真の説明を挿入
Xiao Mingは明らかにそれを実行していないので、標準としてslowを使用する必要があります。明らかに、誰が遅いのかわからないことがあります。したがって、2つを足し合わせるだけです。
また、管理の便宜のために、スレッドをループに追加できます。最終的なコードは次のとおりです。


import threading
import time
time0=time.time()
def print_ming():
    time.sleep(5)
    print('我是小明')

def print_hong():
    time.sleep(3)
    print('我是小红')
thread=[]
ming=threading.Thread(target=print_ming)
thread.append(ming)
hong=threading.Thread(target=print_hong)
thread.append(hong)
for t in thread:
    t.setDaemon(True)
    t.start()

ming.join()
hong.join()

print('执行完了')
time1=time.time()
print(time1-time0)

ここに写真の説明を挿入
ここで、join()メソッドをループに追加しなかったことに注意してください。そうしないと、この結果が表示されます。
ここに写真の説明を挿入
明らかにこれは効果がありませんこれはなぜですか。このように理解できます。ループはメインプログラムにあり、ループには2つのサブルーチンがあります。このプログラムは、2つのプログラムが一緒に実行された場合でも、毎回2回実行されます。つまり、Xiaohongが最初にスレッドを実行して3秒間終了しますが、この時点ではメインプログラムは実行されず、次のサイクルに入ります。このとき、Xiaomingの実行コストは5です。合計8秒。
したがって、ループの外側でjoin()を使用する必要があります

最終結果


import threading
import time
time0=time.time()
def print_ming():
    time.sleep(3)
    print('我是小明')

def print_hong():
    time.sleep(5)
    print('我是小红')
thread=[]
ming=threading.Thread(target=print_ming)
thread.append(ming)
hong=threading.Thread(target=print_hong)
thread.append(hong)
for t in thread:
    t.setDaemon(True)
    t.start()

ming.join()
hong.join()

print('执行完了')
time1=time.time()
print(time1-time0)
#ming=threading.Thread(target=print_ming,args=(填入函数值,没有值需要被填则不设置args参数))

ここに写真の説明を挿入

おすすめ

転載: blog.csdn.net/FUTEROX/article/details/105881962