Как сделать так, чтобы операторы печати и печати постоянно сбрасывались / отображались в блокноте Jupyter при использовании кластера MPI (mpi4py)? Использование mpi4py довольно просто при запуске скриптов в терминале (MWE, но без первых двух строк и магии).
Но при работе в Jupyter по какой-то причине циклы накапливают все выходные данные во время работы, а затем помещают все на экране сразу, когда закончите. Насколько я понимаю, выходные данные хранятся в экземпляре клиента, но я не смог принудительно заставить его грипп sh постепенно. Я не хочу, чтобы пользователи моего пакета обрабатывали его (возможно, через l oop, который ткнул клиенту, чтобы дать ему вновь прибывшие результаты), так как они обычно не программируют так много. Также я хочу сохранить поведение пакета при работе в терминале (используя mpirun), потому что некоторые пользователи являются программистами, и они могут предпочесть использовать его таким образом.
Я совершенно новичок в Jupyter и не уверен что делать, я много гуглил, застрял.
Мне очень нравится, как это может сделать использование MPI интерактивным.
Вопрос:
Есть ли какой-нибудь способ постепенно выводить на экран stdouts и графики во время вычисления?
Буду признателен за любые предложения или идеи.
Спасибо!
Пожалуйста, рассмотрите это MWE для Jupyter:
import ipyparallel as ipp
c = ipp.Client(profile='mpi')
%autopx
from mpi4py import MPI
rank = MPI.COMM_WORLD.rank
size = MPI.COMM_WORLD.size
import matplotlib.pyplot as plt
%matplotlib inline
import time
def master_report():
if rank == 0:
for i in range(10):
time.sleep(0.1) # work to be done
print(f"rank: {rank}, size: {size} progress: {i}")
def master_plot():
if rank == 0:
for i in range(3):
time.sleep(0.1) # work to be done
plt.plot([0,1],[0,i]) # plot new data
plt.axis([0, 1, 0, 2])
plt.show()
master_report() #this creates all plots at once not incrementally
[стандартный вывод: 0]
рейтинг: 0, размер: 5 прогресс: 0
ранг: 0, размер: 5 прогресс: 1
ранг: 0, размер: 5 прогресс: 2
ранг: 0, размер: 5 прогресс: 3
ранг: 0, размер: 5 прогресс: 4
ранг: 0, размер: 5 прогресс: 5
ранг: 0, размер: 5 прогресс: 6
ранг: 0, размер: 5 прогресс: 7
ранг: 0, с из: 5 прогресс: 8
ранг: 0, размер: 5 прогресс: 9
master_plot() #this creates all plots at once not incrementally
[вывод: 0]


