Jakie są dobre praktyki debugowania programów wieloprocesowych w Pythonie?
źródło
Jakie są dobre praktyki debugowania programów wieloprocesowych w Pythonie?
Prawdziwe wieloprzetwarzające programy w języku Python (w przeciwieństwie do wielowątkowych programów w języku Python, które mają do czynienia z przerażającym GIL ) nie różnią się od tych w żadnym innym języku. Wszystkie mają te same podstawowe wyzwania:
Chociaż istnieją metody programistyczne, które starają się uniknąć każdego z tych problemów, na koniec dnia naprawdę musisz pomyśleć o tym, co robisz. Polecam ciężkie testy warunków skrajnych - znacznie wykraczające poza wszystko, co mogłoby się wydarzyć w prawdziwym życiu - abyś miał szansę na trafienie w te okna szansy i wysadzenie w fazie rozwoju, a nie w trakcie ważnego dema lub podczas produkcji.
Kiedyś używaliśmy plików dziennika z mikrosekundami, a następnie stworzyliśmy aplikację do przeglądania dziennika z kodowaniem kolorami, abyśmy mogli spróbować zobrazować, co się dzieje między procesem N uruchomionym na procesorach M. Próbowaliśmy także (i w większości udało się) stworzyć system, który odpędzałby pliki dziennika w celu odtworzenia kontekstu awarii.
Ale najlepszym narzędziem jest dobry projekt i naprawdę niegodziwi, paskudni ludzie, którzy próbują wysadzić twoją aplikację z wody. (Cześć, Dbell!)
Jedną z rzeczy, które uważam za bardzo pomocne, jest użycie istniejącego programu rejestrującego w multiprocessing
module. Wypróbuj to w swoim głównym kodzie:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Zobacz także: http://docs.python.org/library/multiprocessing.html#logging
Ponadto można uzyskać dostęp do bieżącej nazwy procesu za pomocą:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Zobacz: http://docs.python.org/library/multiprocessing.html#multiprocessing.current_process
Poza tym nie znam nic poza standardowymi metodami debugowania, takimi jak pdb
& co.