【发布时间】:2016-05-04 23:14:31
【问题描述】:
随着线程数量的不断增加,我试图找出执行时间的差异。基本上,我想知道在完成该循环中所有线程中的作业后执行外循环需要多长时间。
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 时的执行时间。但是,在我目前的代码中,我认为我并没有在所有线程都执行后得到时间,而是在其余线程正在执行时并行给出时间。我该如何解决这个问题?
【问题讨论】:
-
您尝试做的一个问题是 Python 有一个全局解释器锁 (GIL)。这基本上意味着您的程序实际上只是交错线程,而不是真正的并发。您不会体验到任何加速。如果需要,您可以尝试使用多处理库。
-
还有没有办法找到迭代中的一组线程完成执行的时间?
标签: python multithreading execution-time