我正在努力完成我的编程课程,但我只做了一个练习。
我必须计算在Python中创建线程需要多少时间,以及这是否取决于创建的线程数量。
我写了一个简单的脚本,我不知道它是否好:
import threading
import time
def fun1(a,b):
c = a + b
print(c)
time.sleep(100)
times = []
for i in range(10000):
start = time.time()
threading.Thread(target=fun1, args=(55,155)).start()
end = time.time()
times.append(end-start)
print(times)
有时我得到10000个接近0.0或0.0的结果。
现在我不知道我创建测试是因为我不明白什么,还是可能结果是正确的,创建线程的时间不取决于已经创建的线程的数量?
你能帮我吗?如果这是一个令人担忧的解决方案,请解释为什么,或者如果它是正确的,请确认它?:(
因此有两种方法可以解释您的问题:
- 是否存在其他线程(尚未启动(会影响新线程的创建时间
- 后台运行的其他线程(已启动的线程(是否会影响新线程的创建时间
检查第一个
在这种情况下,您根本不启动线程:
import threading
import time
def fun1(a,b):
c = a + b
print(c)
time.sleep(100)
times = []
for i in range(10):
start = time.time()
threading.Thread(target=fun1, args=(55,155)) # don't start
end = time.time()
times.append(end-start)
print(times)
10次运行的输出:
[4.696846008300781e-05, 2.8848648071289062e-05, 2.6941299438476562e-05, 2.5987625122070312e-05, 2.5987625122070312e-05, 2.5987625122070312e-05, 2.5987625122070312e-05, 2.5987625122070312e-05, 2.5033950805664062e-05, 2.6941299438476562e-05]
正如你所看到的,时间大致相同(正如你所期望的(。
检查第二个
在这种情况下,我们希望之前创建的线程在创建更多线程时继续运行。因此,我们给每个线程一个永远不会完成的任务:
import threading
import time
def fun1(a,b):
while True:
pass # never ends
times = []
for i in range(100):
start = time.time()
threading.Thread(target=fun1, args=(55,155)).start()
end = time.time()
times.append(end-start)
print(times)
输出:
在100多次跑步中,第一次是0.0003440380096435547
,而最后一次是0.3017098903656006
,所以有相当大的增长幅度。