Методы многопроцессорной отладки

У меня проблемы с отладкой многопроцессорного приложения (в частности, с использованием пула процессов в многопроцессорном модуле python). У меня очевидный тупик, и я не знаю, что его вызывает. Трассировки стека недостаточно для описания проблемы, поскольку она отображает только код в модуле многопроцессорности.

Существуют ли какие-либо инструменты Python или другие общие методы, используемые для отладки взаимоблокировок?


person Fragsworth    schedule 30.08.2009    source источник


Ответы (2)


Ага, отладка тупиковых ситуаций - это весело. Вы можете установить более высокий уровень ведения журнала - см. документацию Python для описания это, но очень быстро:

import multiprocessing, logging
logger = multiprocessing.log_to_stderr()
logger.setLevel(multiprocessing.SUBDEBUG)

Кроме того, добавьте в свой код журналирование всего, что связано с ресурсом или еще чем-то, что может вызывать конкуренцию. Наконец, выстрел в темноте: порождение дочерних процессов во время импорта может вызвать проблемы.

person brool    schedule 30.08.2009
comment
Ага - большое количество журналов, каким бы плохим оно ни было, по-прежнему является лучшим общим подходом к изоляции и, в конечном итоге, обнаружению и устранению проблем с взаимоблокировкой ... отсюда +1. multiprocessing имеет определенные проблемы с тупиками в своей очереди, которые хорошо документированы - убедитесь, что вы не сталкиваетесь с ними, возможно. - person Alex Martelli; 30.08.2009

Чтобы избежать взаимоблокировок в первую очередь, полезно изучить передовые методы, поскольку параллельная обработка действительно довольно тонкая. (Бесплатная) Маленькая книга семафоров может быть очень приятным чтением!

person Eric O Lebigot    schedule 30.08.2009