Я пишу приложение на основе MPI -(, но MPI не имеет значения в моем вопросе, я упоминаю его только для того, чтобы показать обоснование )и в некоторых случаях, когда элементов работы меньше, чем процессов, мне нужно создать новый коммуникатор, исключив процессы, которые не имеют ничего общего. Наконец, новый коммуникатор должен быть освобожден процессами, у которых есть работа (и только ими ).
Аккуратным способом сделать это было бы написать:
with filter_comm(comm, nworkitems) as newcomm:
... do work with communicator newcomm...
что тело выполняется только теми процессами, у которых есть работа.
Есть ли в менеджере контекста способ избежать выполнения тела? Я понимаю, что менеджеры контекста по праву были разработаны, чтобы избежать сокрытия потоков управления, но мне интересно, можно ли обойти это, поскольку в моем случае я думаю, что это было бы оправдано для ясности.