2012-11-15 3 views
0

그래서 이걸 가지고 있습니다.다중 처리 오류 받기

from multiprocessing import Process 

def run(): 
    4/0 
    sys.exit() 

def go(self): 
    p = Process(target=run, args=()) 
    p.start() 
    p.join() 

어떻게 프로세스에서 오류를 가져 와서 파일에 저장할 수 있습니까?

답변

0

랩 시도/제외 담요가 잡을에서 함수 예외. 파이썬 로깅 모듈을 사용하여 스택 트레이스를 기록하고, 상황에 따라 locals()를 기록 할 수도 있습니다.

로깅 모듈을 건너 뛰고 'print'를 사용하여 예외 처리 메시지를 콘솔에 인쇄 할 수도 있습니다.

1

로그 모듈을 사용할 수 있습니다. import logging 각 프로세스가 오류/로그를 로그 파일에 직접 기록하도록 할 수 있습니다.

logger = logging.getLogger('spam_application')
logger.warning("Something bad happened")

는 코드에서 다음을 수행하십시오. 주 -. 이것은 당신이 너무 다른 사람을 사용할 수있는 회전 로거 [http://docs.python.org/2/library/logging.html]

from multiprocessing import Process 
import logging 
from logging.handlers import RotatingFileHandler 

r_logger = logging.getLogger('parsexmlfiles') 

def set_logger() 
    FORMAT = '%(asctime)-15s %(clientip)s %(user)-8s %(message)s' 
    parser_logger = logging.getLogger('A_A_logfile') 

    if isdaemon is True: 
     # Log into a Log File. 
     rotatingFH = RotatingFileHandler("/tmp/A_Alogfile.log", mode='a', 
            maxBytes=7340032, backupCount=4, 
            encoding=None, delay=False) 
     rotatingFH.setFormatter(logging.Formatter(
           fmt="%(asctime)s : %(levelname)s : %(message)s", 
           datefmt=None)) 
     parser_logger.addHandler(rotatingFH) 
     parser_logger.setLevel(logging.DEBUG) 

def run(): 
    4/0 
    r_logger.info("Info Message") 
    sys.exit() 

def go(self): 
    set_logger() 
    p = Process(target=run, args=()) 
    p.start() 
    p.join() 
+0

흠, 위의 예를 어떻게 구현할 수 있습니까? –

+0

@AA - 덧글을 편집했습니다. 당신은 실행 메소드를 잡아서 파이썬 코드를 실행하는 동안 오류를 포착하려고 시도 할 수 있습니다. – Harman

+0

실제로 run() 함수에 액세스 할 수 없으므로 편집 할 수 없습니다. –