我试图找到执行时间的差异,因为我不断增加线程数。基本上,我想找到在完成该循环中所有线程中的作业后外循环执行的时间。
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是线程数。我想在n_threads = 1,2 .... 10时找到执行时间。但是,在我目前的代码中,我并不认为我在所有线程执行完毕后都得到时间,而是在其余线程执行时并行给出时间。我该如何解决这个问题?
答案 0 :(得分:0)
你没有得到所有线程完成所需的时间,这是对的。您需要将每个线程附加到列表中。然后调用join方法等待该线程完成其工作。另外,请注意Strikeskid的评论。
start_time = time.time()
threads = []
for i in range(0,n_threads):
t=threading.Thread(target=run, args=(first,last))
threads.append(t)
t.start()
# Wait for all threads to complete
for t in threads:
t.join()
print("For Threads = "+ str(n_threads) +" --- %s seconds ---" % (time.time() - start_time))