Как запускать потоки в цикле, чтобы они отрабатывали заново? Python

Рейтинг: 0Ответов: 1Опубликовано: 21.06.2023

У меня есть код, в котором в цикле запускается n-е количество потоков. После того как все эти потоки отработают, мне нужно запустить этот цикл заново. Важно: Во время работы потоков, из списка l берутся разные значения (при помощи pop()) - нужно это, для того, чтобы в каждом потоке были разные значения. Когда все потоки завершают свою работу, мне нужно запустить заново n-е количество потоков с исходным списком l.

# запуск потоков
def start_class(self):
    for j in range(2):
        threading.Thread(target=Test, args=[self.l]).start()
class Test():
    def __init__(self, l):
        self.l = l
        x = self.l.pop()
        print(x)

l = [1,2,3,4,5,6]
Вывод:
6
5
4
3
и тд
Нужно, чтобы, например при запуске трех потоков, вывелось 6\5\4, а затем при повторном запуске еще трех потоков вывелось еще раз 6\5\4.

Ответы

▲ 0

Нужно где-то дождаться, пока потоки отработают. Как-то так:

    threads = []
    for j in range(2):
        t = threading.Thread(target=Test, args=[self.l])
        t.start()
        threads.append(t)
    ...
    for t in threads:
        t.join()

Но проще и красивее было бы через что-то типа multiprocessing.Pool.map такое сделать.