You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python同时启动大量线程并统计总执行时间?

问题原因与解决方案

核心问题

你当前的代码中,在同一个循环里调用threads[i].start()后立刻执行threads[i].join(),这会导致程序必须等当前线程完全执行完毕,才会启动下一个线程,最终所有线程串行执行,总耗时等于所有线程执行时间的总和。

正确实现方式

只需要把线程的启动和等待操作拆成两个独立循环:先一次性启动所有线程,再统一等待所有线程执行结束。这样所有线程就能并行运行,总耗时会接近单个线程的执行时间(和你手动创建8个线程的效果一致)。

修改后的代码示例:

import threading
import time

def TypeA():
    # 模拟TypeA的执行逻辑,这里以休眠2秒为例
    time.sleep(2)

def TypeB():
    # 模拟TypeB的执行逻辑,这里以休眠2秒为例
    time.sleep(2)

threads = {}
# 创建50个TypeA线程
for i in range(50):
    threads[i] = threading.Thread(target=TypeA)
# 创建50个TypeB线程
for i in range(50, 100):
    threads[i] = threading.Thread(target=TypeB)

programStartTime = time.time()

# 第一步:批量启动所有线程
for i in range(100):
    threads[i].start()

# 第二步:统一等待所有线程执行完成
for i in range(100):
    threads[i].join()

programEndTime = time.time()
totalProgramTime = programEndTime - programStartTime
print(f"总执行时间:{totalProgramTime:.2f}秒")

额外优化建议

可以用列表代替字典存储线程,写法更简洁:

threads = []
# 添加50个TypeA线程
for _ in range(50):
    threads.append(threading.Thread(target=TypeA))
# 添加50个TypeB线程
for _ in range(50):
    threads.append(threading.Thread(target=TypeB))

# 启动所有线程
for thread in threads:
    thread.start()

# 等待所有线程结束
for thread in threads:
    thread.join()

如果线程数量更多,也可以使用concurrent.futures.ThreadPoolExecutor来更高效地管理线程,但对于100个线程来说,直接用循环启动已经足够简单高效。

内容的提问来源于stack exchange,提问作者Canberk Ekinci

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:42:37