2013-06-10 5 views
1

Я пытаюсь отладить подпроцесс Python (запущен с многопроцессорным процессом). Я создал более простой проект только с помощью следующего кода, запустил удаленный отладчик, а затем запустил проект. Я ожидаю, что Eclipse разобьется на утверждение settrace.PyDev и отламывание сломается молча

import multiprocessing 
import pydevd 

def new_proc(): 
    print("New Procedure.") 

    pydevd.settrace() 
    print("After settrace.") 

p = multiprocessing.Process(target=new_proc) 
p.start() 
p.join() 

Я вижу вывод из первого оператора печати, но не из второго, и никакой разрыв не выполняется.

Затем я отправил settrace() параметр «suspend» с помощью False.

import multiprocessing 
import pydevd 

def new_proc(): 
    print("New Procedure.") 

    pydevd.settrace(suspend=False) 
    print("After settrace.") 

p = multiprocessing.Process(target=new_proc) 
p.start() 
p.join() 

На этот раз я вижу оба сообщения, как ожидалось. Затем я установил точку останова во втором операторе печати и снова запустил. Теперь я больше не вижу второго сообщения.

Следовательно, похоже, что Eclipse нарушает выполнение, когда это предполагается, но не возвращает мне контроль. Есть что-то, что мне не хватает?

ответ

3

Ну, если это ваш точный код, и вы работаете в Windows, проблема в том, что вы не настраиваете многопроцессорность должным образом (вам нужно проверить на freeze_support()), то есть при условии, что вы начинаете удаленный отладчик правильно тоже: http://pydev.org/manual_adv_remote_debugger.html

Ie:

import multiprocessing 
import pydevd 

def new_proc(): 
    print("New Procedure.") 

    pydevd.settrace() 
    print("After settrace.") 

if __name__ == '__main__': 
    multiprocessing.freeze_support() 

    p = multiprocessing.Process(target=new_proc) 
    p.start() 
    p.join() 
+0

Что ?? Хахаха. Где для файла PyDev требуется документация freeze_support(), требуемая для отладки PyDev? –

+0

Это не имело значения. –

+0

Какая ОС вы используете? (freeze_support требуется для многопроцессорности в Windows) –