다중 프로세스 예외 캡처

최근에 디버깅 프로그램을 디버깅할 때 항상 묘하게 이상이 발생한다. 현상적으로 말하자면 다중 프로세스 프로그램이 묘하게 종료되고 오류가 발생하지 않는 창고 정보를 보고하지 않는 것이다.
단일 프로세스 추적으로 변경한 후 다음 문장에\d가 잘못 쓰여 있음을 발견했습니다.
def launch(s, e, i)
# ...
print 'Process -%d\tnum: %d\tsuccess: %d\tdiscard: %d\tnull_num: \d\terr: %d\ttime_clock: %s' % \
      (pid, num, cnt, discard, null_num, err, str(time.clock()))
# ...
if __name__ == "__main__":
    for i in range(2):
        _start = 1
        _end = 100
        pool.apply_async(launch, (_start, _end, i))
    pool.close()
    pool.join()

단일 프로세스 디버깅 시:
def launch()
# ...
print 'Process -%d\tnum: %d\tsuccess: %d\tdiscard: %d\tnull_num: \d\terr: %d\ttime_clock: %s' % \
      (1, 2, 3, 4, 5, 6, str(time.clock()))
# ...
if __name__ == "__main__":
    for i in range(2):
        _start = 1
        _end = 100
        pool.apply_async(launch)
    pool.close()
    pool.join()

오류는 다음과 같습니다.
 Traceback (most recent call last):
  File "E:/repository/datafuse/snowball/src/abs_person_import_133_debug.py", line 920, in <module>
    launch(1,100,0)
  File "E:/repository/datafuse/snowball/src/abs_person_import_133_debug.py", line 907, in launch
    (pid, num, cnt, discard, null_num, err, str(time.clock()))
TypeError: not all arguments converted during string formatting

분석에 의하면 다중 프로세스 실행 방식을 사용하기 때문에 하위 프로세스를 시작한 후 프로세스 이상 출력은 현재 단말기(ssh 연결)에 나타나지 않으며 하위 프로세스가 단말기 출력을 차지하지 않기 때문에 이상 창고를 인쇄하지 않을 것으로 추정된다.
그러나 프로그램이 아래와 같이 수정된 후에도 여전히 틀리지 않았다...(╯‵□′)╯︵┻━┻
def launch(a, b, c)
# ...
print 'Process -%d\tnum: %d\tsuccess: %d\tdiscard: %d\tnull_num: \d\terr: %d\ttime_clock: %s' % \
      (a, b, c, 4, 5, 6, str(time.clock()))
# ...

if __name__ == "__main__":

    for i in range(2):
        _start = 1
        _end = 100
        pool.apply_async(launch, (1, 100, 0))

    pool.close()
    pool.join()

파라미터를 사용했기 때문에 Pool에서 처리 절차가 바뀌었을 수도 있습니다.
인터넷이 끊겼어요...(계속)

좋은 웹페이지 즐겨찾기