2012-06-19 9 views
3

간단한 파이썬 응용 프로그램을 디버깅하려하지만 지금까지는 행운이 없습니다.파이썬 다중 프로세스 디버깅

import multiprocessing 

def worker(num): 
    for a in range(0, 10): 
     print a 

if __name__ == '__main__': 
    for i in range(5): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     p.start() 

는 I '는'하지만 난 그렇게 할 수있는 시도 도구의 비의 값을 추적하기위한 루프 내부에 중단 점을 설정하고 싶습니다. 지금까지 내가 함께 debuging 시도 :

  • PyCharm 다음과 같은 오류 얻을 : ImportError를 : 이름 없음 모듈을 pydevd - 내가 이해 그들은 여전히이과에서 문제를 해결하기 위해 노력하고 있습니다 처럼 http://youtrack.jetbrains.com/issue/PY-6649 그것은 아니, 보이는 ETA에이
  • 나는 또한 Winpdb와 debuging 시도 - http://winpdb.org을하지만 '는이'

난 정말이 어떤 도움을 주셔서 감사합니다 것입니다 단지 내 '노동자'메서드 내 가지 않을 것이며, 단지 값을 인쇄 !

+1

멀티 프로세싱/멀티 스레딩의 경우에는 "간단한"것은 없습니다. 제 의견으로는, 적어도. – JAB

+1

이것은 PyCharm 디버거의 Windows 관련 버그입니다. 다중 처리 모듈을 사용하여 애플리케이션을 디버깅해야하는 경우 Unix 가상 시스템을 사용하고 PyCharm의 해당 VM에 원격 인터프리터를 설치하는 것이 좋습니다. –

답변

0

파이썬 코드를 디버깅 할 때 기존 디버거를 사용할 필요가 거의 없었습니다. 대신 코드에 자유롭게 뿌리 내리기를 선호했습니다. 나는 다음에 코드를 변경 것 :

import multiprocessing 
import logging 

def worker(num): 
    for a in range(0, 10): 
     logging.debug("(%d, %d)" % (num, a)) 

if __name__ == '__main__': 
    logging.basicConfig(level=logging.DEBUG) 
    for i in range(5): 
     p = multiprocessing.Process(target=worker, args=(i,)) 
     logging.info("Starting process %d" % i) 
     p.start() 

생산에서 디버그 추적 문을 사용하지 logging.WARNING에 대한 추적 레벨을 설정하여 만 경고 및 오류를 기록 할 수 있도록.

공식 Python 사이트에 좋은 로터스 튜토리얼이 있습니다. basicadvanced입니다.

+0

나는 귀하의 빠른 답변에 진심으로 감사하지만 불행히도 이것은 내가 찾고있는 것이 아닙니다. 내 질문에 언급 했어야 할 것은 이것이 필요한 기능의 단순한 예일 뿐이지 만 실제로는 복잡한 개체를 다루고 있으며 특정 시점에 내용을 보려면 중단 점이 필요합니다. 간단한 인쇄만으로는 충분하지 않습니다. – barmaley

+0

Visual Studio 디버거만큼이나 유용한 파이썬 디버거에 대해 모르겠습니다. 아마도 조건부 중단 점을 효과적으로 시뮬레이트하여 특정 조건 하에서 만 기록하도록 로깅 기법을 수정할 수 있습니까? – CadentOrange

+0

로깅은 훌륭하지만 로깅 수준이 로깅 문 수준보다 높게 설정된 경우에도 무료가 아닙니다. 함수 호출이 파이썬과 같은 동적 언어에서 상당한 비용을 발생시키기 때문입니다. 디버거를 아는 것이 좋으며 pdb는 Python과 함께 제공됩니다. 그렇다면 멀티 프로세싱 프로젝트를 올바로 설정하는 것이 문제 일뿐입니다. – velotron

2

내 virtualenv에서 /Applications/PyCharm\ 2.6\ EAP.app/helpers/pydev/*.py의 모든 내용을 복사했으며 내 (나는 셀레/디버깅을 디버깅 중이며 중단 점은 예상대로 작동 함)에서 작동했습니다.

0

일반 pdb/ipdb가 다중 처리와 함께 작동하면 좋을 것입니다. 내가 멀리 얻을 수 있다면 단 하나의 프로세스를 사용 디버깅, 응용 프로그램을 구성 할 때 구성 프로세스의 수는 그 후 1

if processes == 1: 
    for record in data: 
     worker_function(data) 
else: 
    pool.map(worker_function, data) 

인 경우, 나는 연속적으로 멀티 프로세싱에 대한 호출을 처리합니다. 동시성 문제를 다룰 때 모든 경우에 적용되는 것은 아니지만 도움이 될 수 있습니다.

0

WingIDE Pro은 바로이 기능을 즉시 사용할 수 있습니다.

추가 코드 (예 : traceback 모듈 사용)가 필요하지 않습니다. 프로그램을 실행하기 만하면 Wing 디버거는 하위 프로세스에서 stdout을 인쇄 할뿐만 아니라 하위 프로세스의 오류를 중단하고 을 즉시 만들고 대화 형 셸을 만들어 문제가되는 스레드을 디버깅 할 수 있습니다. 이보다 더 쉽지는 않지만, 이런 식으로 서브 프로세스를 노출하는 다른 IDE가 없다는 것을 알고 있습니다.

예, 상용 제품입니다. 하지만 아직 일치하는 디버거를 제공하는 다른 IDE를 찾지 못했습니다. PyCharm Professional, Visual Studio Community, Komodo IDE - 모든 것을 시도했습니다. WingIDE는 또한 소스 문서를 파싱하는 데에도 도움이된다고 생각합니다. 그리고 안락한 녹색 색 구성표는 내가 지금 없이는 살 수없는 것입니다.

(예,이 질문은 5 세 이상입니다. 어쨌든 대답하고 있습니다.)

관련 문제