Які є хороші практики налагодження багатопроцесорних програм у 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.