В общем, мне нужны потоки для выполнения работы (некоторые операции ввода-вывода) в бесконечном цикле, но каждый цикл начинается с разрешение главного потока, а разрешение дается только после завершения предыдущего цикла всеми потоками.
скрипт 1
Код: Выделить всё
from threading import Barrier, Thread
from time import sleep, time
br = Barrier(3)
store = []
def f1():
while True:
br.wait()
sleep(1)
print("Calc part1")
def f2():
while True:
br.wait()
sleep(1)
print("Calc part2")
Thread(target=f1).start()
Thread(target=f2).start()
for i in range(10):
br.wait()
print(f'end iter {i}')
print(f'-------------')
Код: Выделить всё
ent iter 0
-------------
Calc part1
Calc part2
ent iter 1
-------------
Calc part2
Calc part1
ent iter 2
-------------
Calc part1
...
Код: Выделить всё
from threading import Condition, Thread
from time import sleep
condition = False
cv = Condition()
def predicate():
return condition
def f1():
for i in range(3):
with cv:
cv.wait_for(predicate)
sleep(1)
print("Calc part1")
def f2():
for i in range(3):
with cv:
cv.wait_for(predicate)
sleep(1)
print("Calc part2")
Thread(target=f1).start()
Thread(target=f2).start()
with cv:
condition = True
cv.notify_all()
Код: Выделить всё
Calc part1
Calc part1
Calc part1
Calc part2
Calc part2
Calc part2
Подробнее здесь: https://stackoverflow.com/questions/787 ... -condition
Мобильная версия