Каковы некоторые хорошие практики в отладке многопроцессорных программ в Python?
источник
Каковы некоторые хорошие практики в отладке многопроцессорных программ в Python?
Настоящие многопроцессорные программы на Python (в отличие от многопоточных программ на Python, которые имеют дело с страшным GIL ) ничем не отличаются от программ на любом другом языке. Все они имеют одинаковые основные проблемы:
Хотя существуют методы разработки, которые пытаются избежать каждой из этих проблем, в конце концов вам действительно нужно подумать о том, что вы делаете. Я рекомендую проводить тяжелые стресс-тесты - гораздо больше, чем вы думаете, которые могут произойти в реальной жизни, - чтобы у вас был хороший шанс попасть в Windows «Возможности» и взорваться в процессе разработки, а не в середине крупной демонстрации или в процессе производства.
Мы использовали файлы журналов с микросекундной меткой времени, а затем создавали приложение для просмотра журналов с цветовой кодировкой, чтобы мы могли попытаться визуализировать то, что происходило между N-процессами, выполняемыми на M-процессорах. Мы также попытались (и в основном преуспели) в создании системы, которая будет выгружать файлы журналов для воссоздания контекста сбоя.
Но лучший инструмент - это хороший дизайн и действительно злые, противные люди, которые пытаются выбросить ваше приложение из воды. (Привет, Дебл!)
Одна вещь, которую я считаю очень полезной, - это использовать существующий регистратор в multiprocessing
модуле. Попробуйте это в своем основном коде:
import multiprocessing, logging
mpl = multiprocessing.log_to_stderr()
mpl.setLevel(logging.INFO)
Смотрите также: http://docs.python.org/library/multiprocessing.html#logging
Кроме того, вы можете получить доступ к имени текущего процесса, используя:
cpname = multiprocessing.current_process().name
# print cpname
mylogger.info("{0} is currently doing...".format(cpname))
Смотрите: http://docs.python.org/library/multiprocessing.html#multiprocessing.current_process
Кроме этого, я не знаю ничего другого, кроме стандартных методов отладки, таких как pdb
& co.