使用Python同时启动大量线程

问题描述 投票:0回答:1

我试图在 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 循环,我想不出任何其他解决方案,而且我也无法在网络上找到任何解决方案。

python multithreading
1个回答
0
投票

你明白

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()
© www.soinside.com 2019 - 2024. All rights reserved.