首页>Program>source

我正在尝试完成编程Class程,并且只能参加一项练习。

我必须计算在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的结果。

现在我不知道是否创建了测试,因为我不了解某些内容,或者结果是否正确,并且创建线程的时间不取决于已创建的线程的数量?

您能帮我吗? 如果是磨损的解决方案,请向我解释原因,或者是否正确? :)

最新回答
  • 27天前
    1 #

    因此,有两种方法可以解释您的问题:

    是否存在其他尚未启动的线程会影响新线程的创建时间

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

    Checking the first one

    在这种情况下,您根本不启动线程:

    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]
    

    如您所见,时间大致相同(如您所愿)。

    Checking the second one

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

    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 所以在那里有很大的增长。

  • Python将数据从1个df复制到其他df中的第一个匹配行
  • SSR getServerSideProps上的nextjs graphql上下文为空{}