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