Я хочу запустить процесс в нескольких потоках, но после каждой итерации процессы должны ждать завершения глобального процесса. Более конкретно:
У меня есть список "муравьев", которые все строят тур на графике (это я хочу сделать одновременно). Это происходит много раз за много итераций. После того, как каждый муравей завершил свою итерацию, я хочу обновить график. Как я могу лучше всего это сделать? какой-то код у меня есть:
ants = [Ant() for _ in range(50)] # 50 ants in a list
with concurrent.futures.ThreadPoolExecutor(max_workers=4) as ex:
# start threads on slices of ants
f1 = ex.submit(solve_aco, ants[:n_ants//4], epochs)
f2 = ex.submit(solve_aco, ants[n_ants//4:n_ants // 2], epochs)
f3 = ex.submit(solve_aco, ants[n_ants // 2:n_ants // 2 + n_ants // 4], epochs)
f4 = ex.submit(solve_aco, ants[n_ants // 2 + n_ants // 4:], epochs)
# while not finished: if all ants are waiting, update graph
def solve_aco(ants, epochs):
for _ in range(epochs):
# Construct route through graph
# Wait until graph update, then continue next epoch
Я пробовал некоторые вещи с помощью threading.Condition (), но я не могу понять, где и как правильно ожидать / уведомлять потоки.
Заранее спасибо!