0
スレッドの数を増やしていくうちに、実行時間の差を見つけようとしています。基本的には、そのループ内のすべてのスレッドでジョブを完了した後に、外側のループがどれくらいの時間実行されるかを調べたいと思います。N個のスレッドを使用して実行した後の実行時間を調べる
import threading
import time
from math import sqrt
def run(start, end):
[sqrt(i) for i in range(start,end)]
n_threads = 2
n_vals = 1000000
start_time = time.time()
for n_threads in range(1,11):
start_time = time.time()
for i in range(0,n_threads):
first = int((n_vals/n_threads)*i)
last = int((n_vals/n_threads)*(i+1))
t=threading.Thread(target=run, args=(first,last))
t.start()
print("For Threads = "+ str(n_threads) +" --- %s seconds ---" % (time.time() - start_time))
これはn_threadsはthreads.Iの数は、実行時間n_threads = 1,2 .... 10を見つけたいですスレッド間で均等にジョブを分割する単純なプログラムです。しかし、私の現在のコードでは、すべてのスレッドが実行されてから時間がかかっているとは思えませんが、スレッドの残りの部分が実行されている間に時間が並行して与えられます。これをどうやって解決するのですか?
あなたがしようとしていることの1つの問題は、Pythonにグローバルインタープリタロック(GIL)があることです。基本的には、プログラムは実際にスレッドをインターリーブするだけで、真の並行処理は行われません。どんなスピードアップも経験しません。必要に応じて、マルチプロセッシングライブラリを使用することもできます。 – Strikeskids
イテレーションのスレッドが実行を終了した時刻を見つける方法はまだありますか? – Muhammad