用python创建线程需要多长时间

用python创建线程需要多长时间,python,multithreading,Python,Multithreading,我正试图完成我的编程课程,但我被一个练习卡住了 我必须计算在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() thr

我正试图完成我的编程课程,但我被一个练习卡住了

我必须计算在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)
在times[]中,我得到了接近0.0甚至0.0的10000个结果

现在我不知道我是否因为不理解某些东西而创建了测试,或者可能结果是正确的,创建线程的时间不取决于已经创建线程的数量


你能帮我吗?如果是worng解决方案,请解释原因,或者如果正确,请确认它:)

所以有两种方法来解释你的问题:

  • 其他线程(尚未启动)的存在是否会影响新线程的创建时间
  • 后台运行的其他线程(已启动的线程)是否会影响新线程的创建时间
  • 检查第一个

    在这种情况下,您只是不启动线程:

    导入线程
    导入时间
    def fun1(a、b):
    c=a+b
    印刷品(c)
    时间。睡眠(100)
    时间=[]
    对于范围(10)内的i:
    开始=时间。时间()
    threading.Thread(target=fun1,args=(55155))#不启动
    end=time.time()
    times.append(结束-开始)
    印刷(次)
    
    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]
    
    正如你所看到的,时间大致相同(正如你所预料的)

    检查第二个

    在这种情况下,我们希望前面创建的线程在创建更多线程时保持运行。因此,我们给每个线程一个永远无法完成的任务:

    导入线程
    导入时间
    def fun1(a、b):
    尽管如此:
    过不完
    时间=[]
    对于范围(100)内的i:
    开始=时间。时间()
    threading.Thread(target=fun1,args=(55155)).start()
    end=time.time()
    times.append(结束-开始)
    印刷(次)
    
    输出:


    超过100次,第一次用了
    0.0003440380096435547
    ,而最后一次用了
    0.3017098903656006
    ,因此增加幅度很大。

    因此有两种方法来解释你的问题:

  • 其他线程(尚未启动)的存在是否会影响新线程的创建时间
  • 后台运行的其他线程(已启动的线程)是否会影响新线程的创建时间
  • 检查第一个

    在这种情况下,您只是不启动线程:

    导入线程
    导入时间
    def fun1(a、b):
    c=a+b
    印刷品(c)
    时间。睡眠(100)
    时间=[]
    对于范围(10)内的i:
    开始=时间。时间()
    threading.Thread(target=fun1,args=(55155))#不启动
    end=time.time()
    times.append(结束-开始)
    印刷(次)
    
    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]
    
    正如你所看到的,时间大致相同(正如你所预料的)

    检查第二个

    在这种情况下,我们希望前面创建的线程在创建更多线程时保持运行。因此,我们给每个线程一个永远无法完成的任务:

    导入线程
    导入时间
    def fun1(a、b):
    尽管如此:
    过不完
    时间=[]
    对于范围(100)内的i:
    开始=时间。时间()
    threading.Thread(target=fun1,args=(55155)).start()
    end=time.time()
    times.append(结束-开始)
    印刷(次)
    
    输出:


    在100多次运行中,第一次运行的时间
    0.0003440380096435547
    ,而最后一次运行的时间
    0.3017098903656006
    ,因此有相当大的增长幅度。

    当你说“这是否取决于已经创建的数量”时您是否希望测量其他线程的存在是否会影响创建时间,或者后台运行的其他线程(即启动线程)是否会影响创建时间?那会很不一样,我想是第一个。对任务进行了描述,以便我能够以任何方式对其进行解释。我得到了运行该任务的合理数字。无论如何,您可能希望测量循环开始和结束时的时间,然后计算线程数的平均值。当您说“这是否取决于已创建线程的数量”时,您希望测量其他线程的存在是否会影响创建时间,或者其他线程是否在后台运行(即启动线程)影响创建时间?这将是非常不同的。我认为这是关于第一个任务。任务的描述是为了让我能够以任何方式对其进行解释。我得到了运行该任务的合理数字。无论如何,您可能希望测量循环开始和结束时的时间,然后对线程数进行平均。非常感谢@Aziz:)非常感谢@Aziz:)