我试图在 for 循环中同时启动很多线程(其中 100 个),并获取使用 Python 执行它们所需的总时间。
首先我手动创建了8个线程并同时启动它们没有任何问题。
A1 = threading.Thread(target=TypeA)
A2 = threading.Thread(target=TypeA)
A3 = threading.Thread(target=TypeA)
A4 = threading.Thread(target=TypeA)
B1 = threading.Thread(target=TypeB)
B2 = threading.Thread(target=TypeB)
B3 = threading.Thread(target=TypeB)
B4 = threading.Thread(target=TypeB)
programStartTime = time.time()
A1.start()
A2.start()
A3.start()
A4.start()
B1.start()
B2.start()
B3.start()
B4.start()
A1.join()
A2.join()
A3.join()
A4.join()
B1.join()
B2.join()
B3.join()
B4.join()
programEndTime = time.time()
totalProgramTime = programEndTime - programStartTime
totalProgramTime 变量约为 2 秒,而且每个线程的执行时间也完全相同。
然后我想创建 100 个线程。
threads={}
for i in range(50):
threads[i] = threading.Thread(target=TypeA)
for i in range(50, 100):
threads[i] = threading.Thread(target=TypeB)
programStartTime = time.time()
for i in range(100):
threads[i].start()
threads[i].join()
programEndTime = time.time()
totalProgramTime = programEndTime - programStartTime
这次线程是按顺序工作的,总时间是所有线程执行时间的总和。如何在创建线程的同时使线程再次并行工作?我需要手动创建并启动它们吗?
我只尝试过 for 循环,我想不出任何其他解决方案,而且我也无法在网络上找到任何解决方案。
你明白
t.join()
的作用吗?它不会对线程 t
做任何事情。
t.join()
唯一做的事情是,它等待 线程 t
完成,然后返回。
线程按顺序运行的原因是,您的代码等待每个线程完成后再启动下一个线程:
for i in range(100):
threads[i].start()
threads[i].join()
您想要做的是,首先启动所有线程,然后然后
join
所有线程。
for i in range(100):
threads[i].start()
for i in range(100):
threads[i].join()