Как отследить то, что все потоки завершились (Python)

в цикле создаются потоки, и нужно как-то отследить то, что все они закончили свою работу(или ожидать, пока они все не закончат работу), перед тем, как функция снова вызовется.

def some():
    for num, url in enumerate(urls):
        thread = threading.Thread(target=download, args=[num + 1, url])
        thread.start()
while True:
    some()

Ответы (2 шт):

Автор решения: CrazyElf

Вроде как-то так, например:

def some():
    threads = []
    for num, url in enumerate(urls):
        thread = threading.Thread(target=download, args=[num + 1, url])
        thread.start()
        threads.append(thread)
    return threads

threads = some()
for thread in threads:
    thread.join()
→ Ссылка
Автор решения: gil9red

Попробуйте через Pool.map:

from multiprocessing.dummy import Pool as ThreadPool

pool = ThreadPool()
results = pool.map(download, enumerate(urls, 1))
print(results)

PS.

Если в enumerate вторым параметром передать 1, то индексация будет с 1, а не 0

→ Ссылка