Jestem nowym użytkownikiem IPython i chciałbym drukować wyniki pośrednie na standardowe wyjście podczas pracy z równoległymi funkcjami klastra IPython. (Mam świadomość, że w przypadku wielu procesów może to zniekształcać dane wyjściowe, ale jest to w porządku - służy tylko do testowania/debugowania, a procesy, które będę wykonywał, są wystarczająco długie, aby takie kolizje były mało prawdopodobne.) Sprawdziłem dokumentacja dla IPython, ale nie może znaleźć przykładu, w którym drukowana jest funkcja zrównoleglona. Zasadniczo szukam sposób przekierowanie wydruków z podprocesów głównej stdout, odpowiednik ipython zDrukowanie na stdout w procesach równoległych IPython
subprocess.Popen(... , stdout=...)
drukowania wewnątrz procesu nie działa:
rc = Client()
dview = rc()
def ff(x):
print(x)
return x**2
sync = dview.map_sync(ff,[1,2,3,4])
print('sync res=%s'%repr(sync))
async = dview.map_async(ff,[1,2,3,4])
print('async res=%s'%repr(async))
print(async.display_outputs())
zwraca
sync res=[1, 4, 9, 16]
async res=[1, 4, 9, 16]
więc obliczenia wykonuje się poprawnie, ale instrukcja print w ff funkcja nie jest drukowany, nawet gdy wszystkie procesy returne re. Co robię źle? Jak mogę "wydrukować" do pracy?
Bardzo pomocna odpowiedź. Czy jest jakiś sposób, aby zobaczyć wydruki standardowe podczas wykonywania obliczeń? – spencerlyon2
yes - dla instrukcji print, po prostu wykonaj 'for out in asyncresult.stdout: print out', które możesz wykonać w dowolnym momencie, nawet jeśli dane wyjściowe są częściowe. – minrk
Czy można to osiągnąć bez dostępu do kodu źródłowego? Istnieje biblioteka, z której korzystam, która drukuje wiadomości dziennika w wątkach i chcę ją wydrukować w trakcie działania. Czy musiałbym rozszerzyć jedną z klas IPython, aby to zrobić? – hgcrpd