代码之家  ›  专栏  ›  技术社区  ›  martin

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

  •  0
  • martin  · 技术社区  · 4 年前

    我写了一个简单的剧本,我不知道它是否好:

    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的结果。

    现在我不知道我是否因为不明白什么而创建了测试,或者可能结果是正确的,创建线程的时间不取决于已经创建的线程的数量?

    你能帮我吗?如果这是工作解决方案,解释我为什么,或者如果它是正确的确认它?:)

    1 回复  |  直到 4 年前
        1
  •  1
  •   Aziz Sonawalla    4 年前

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

    1. 其他在后台运行的线程(线程已经启动)是否会影响新线程的创建时间。

    在这种情况下,不需要启动线程:

    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)
    

    [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 所以有相当大的增长。