2010-11-28 6 views
4

Я хотел бы иметь возможность отлаживать код, который выполняется в отдельном процессе с использованием пакета multiprocessing.Есть ли способ отладки кода Python, который работает на `multiprocessing.Process`?

Я помню, что искал решение около года назад и не нашел его. Мне сказали просто сделать много регистрации, но, конечно, это более низкий метод. Так может быть, кто-то придумал решение тем временем? Например, какой-то механизм для создания недавно созданного процесса соединяется с отладчиком?

ответ

1

Вы можете запустить процесс. Вам нужно отлаживать вручную, не используя интерфейс Process в этом процессе.

+0

Я вообще не понимаю, вы можете уточнить? – 2010-11-28 19:13:49

+0

Прокомментируйте начало процесса. Вы хотите отлаживать, но сделать его вариантом командной строки для запуска только этого процесса (с включенным отладчиком). Запустите программу (она, вероятно, застрянет, поскольку процесс, который вы отключили, не запускается;)). Затем запустите программу с аргументом командной строки. Теперь у вас на консоли есть процесс, который нужно запустить под отладчиком. На второй консоли в фоновом режиме выполняется все остальное. Таким образом, отлаженный процесс не использует многопроцессорность. – 2010-12-04 16:04:37

1

Возможно, вы найдете WingIDE. Его отладчик действительно хорош, и он даже поддерживает отладку удаленных процессов с помощью некоторых минимальных инструментов для отладки кода. Это не бесплатно, но стоит того, ИМХО. (Я никак не связан с Wingware, просто довольный клиент ...)

Чтобы включить удаленную отладку в Wing, вам необходимо скопировать файл wingdbstub.py в тот же каталог, что и приложение, которое вы хотите отлаживать, и импортировать его в месте вашего кода, который вы хотите отлаживать. (. Это покрыто довольно подробно в WingIDE docs)

Если вы this example и изменить метод myfunc() выглядеть следующим образом:

def myfunc(conn, commands): 
    import wingdbstub 
    # ... remainder same as original example 

вы должны быть в состоянии запустить WingIDE, установить точку останова сразу после того, как import, затем запустите сценарий примера с консоли. Он должен автоматически подключиться к Wing и остановиться в точке останова.

Возможно, вы найдете this post, если у вас возникли проблемы с получением работы отладочного соединения. (В документах WingIDE также делается достойная работа по устранению проблем со связью.)

+0

Я сам жадный пользователь Wing. Но я не знаю, как заставить его отлаживать отдельные процессы. – 2010-11-28 19:13:18

0

Вместо того, чтобы запускать свою функцию или класс через Process, просто вызовите его напрямую и отлаживайте, как обычно.

Смежные вопросы