Многопоточная итерация в цикле

Цель: После того, как первый созданный поток сделал 1 итерацию в цикле, второй созданный поток тоже сделал 1 итерацию с того момента, как закончил предыдущий. Третий начал с момента предыдущего. А затем первый с момента предыдущего.

Например: 1-ый поток сделал итерацию (i стало равным 2). 2-ой поток продолжил с i = 2 (i стало равным 3). 3-ий поток продолжил итерацию с i = 3 (i стало равным 4). Далее возращаемся к 1-ому потоку: он начинает итерацию с i = 4 (i стало равным 5). И так далее...

(Всего должно быть задействовано 3, созданных нами, потока)

import threading
import time


i = 1


def spammer(max_words=5):
    global i
    while i <= max_words:
        with lock:
            print(f'{threading.current_thread().name} : {str(i)}/{max_words}')
            i += 1
            time.sleep(1)


lock = threading.Lock()

thread1 = threading.Thread(target=spammer, name='thread1')
thread2 = threading.Thread(target=spammer, name='thread2')
thread3 = threading.Thread(target=spammer, name='thread3')

thread1.start()
thread2.start()
thread3.start()

thread1.join()
thread2.join()
thread3.join()


print('Complete!')

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