2012년 8월 15일 수요일

파이썬 3.3 베타 2 릴리스

원문: Python 3.3 Beta 2 Released (날짜: 2012-08-14, 작성자: Brian Curtin)

릴리스 담당자인 Georg Brandl 님이 Mac 및 Windows용 설치 프로그램을 포함하는 CPython 3.3의 두 번째 베타 버전을 릴리스 한다고 발표하였습니다. 이번 릴리스는 최종적으로 확정된 기능을 포함하며, 남은 문제를 사용자의 도움을 받아 해결하는 것을 목표로 합니다.

이번 베타에 이어 두 번의 릴리스 후보를 8월 25일, 9월 8일에 발표할 예정입니다. 최종 릴리스는 9월 22일로 예정되어 있습니다.

파이썬 3.3에서 새로운 점 문서는 현재 큐레이터이자 고참 개발자인 Raymond Hettinger 님이 마무리하고 있습니다. 문서에 이미 새로운 변경 사항이 다수 포함되어 있지만 새 버전의 문서도 살펴봐 주셔야 할 것입니다.

다음은 주요 변경 사항입니다.

  • PEP 380, 서브 제너레이터(subgenerator)에 위임하는 문법 ("yield from")
  • PEP 393, 유연한 문자열 표현 ("와이드[wide]" 및 "내로우[narrow]" 유니코드 빌드의 구분을 없앰)
  • decimal을 많이 쓰는 프로그램에 대해 최대 80배까지 속도를 빠르게 해주는 "decimal" 모듈에 대한 C 구현체
  • 이제 기본적으로 importlib 기반으로 동작하는 import 시스템 (__import__)
  • LZMA/XZ 지원을 위해 새로 추가된 "lzma" 모듈
  • PEP 397, Windows용 파이썬 실행기
  • PEP 405, 가상 환경의 기본 지원
  • PEP 420, 네임스페이스 패키지 지원
  • PEP 3151, OS 및 IO 예외의 체계 재정비
  • PEP 3155, 클래스 및 함수에 대한 한정된(qualified) 이름
  • PEP 409, 예외의 문맥 숨기기
  • PEP 414, 포팅에 도움을 주기 위한 명시적인 유니코드 리터럴
  • PEP 418, "time" 모듈에 플랫폼 독립적인 확장 시계
  • PEP 412, 객체 지향 코드의 메모리를 상당히 절약해줄 수 있는 키를 공유하는 방식의 새로운 딕셔너리 구현
  • PEP 362, 함수 시그너처(signature) 객체
  • 크래시 진단을 도와주는 새로 추가된 "faulthandler" 모듈
  • 새로 추가된 "unittest.mock" 모듈
  • 새로 추가된 "ipaddress" 모듈
  • "sys.implementation" 속성
  • email 패키지의 정책(policy) 프레임워크. 이메일 헤더 파싱의 유니코드 지원을 개선해주는 정책은 잠정적으로 포함됨(PEP 411 참고)
  • 여러 개의 매핑을 하나로 묶는 "collections.ChainMap" 클래스
  • "os"와 "signal" 모듈에 POSIX 함수에 대한 래퍼가 더 많이 추가되었고, "sendfile()"과 같은 유용한 함수도 추가됨
  • 앞선 버그 수정 릴리스에서 도입된 해시 랜덤화가 이제 기본적으로 사용됨

파이썬 3.3에서 새로 추가되거나 개선된 API 항목이 모두 500여 개에 이릅니다.

이번 릴리스를 http://www.python.org/download/releases/3.3.0/에서 꼭 확인해 보시고 문제가 있다면 http://bugs.python.org에 보고해주시길 부탁드립니다.

2011년 8월 29일 월요일

팀과 만남: Brett Cannon

원문: Meet the Team: Brett Cannon (날짜: 2011-08-24, 작성자: Brian Curtin)

이 글은 "팀과 만남" 시리즈 중의 하나로, 파이썬 코어 개발팀을 간단히 소개합니다.

이름:Brett Cannon
사는 곳:미국 캘리포니아 샌프란시스코
홈페이지:https://profiles.google.com/bcannon
블로그:http://sayspy.blogspot.com

파이썬을 사용한 지는 얼마나 되었습니까?

2000년 가을부터 입니다.

코어 커미터가 된 지는 얼마나 되었습니까?

2003년 4월부터(PyCon 2003이 끝난 직후) 입니다.

코어 개발자로 출발은 어땠습니까? 처음 한 커밋을 기억하고 있습니까?

사람들에게 제 패치를 커밋해달라고 계속 귀찮게 한 덕분에 저는 코어 개발자가 될 수 있었습니다. (이 트릭은 예전만큼 잘 통하지는 않습니다. 파이썬이 2003/2004년에 폭발적인 인기를 얻기 전에만 가능했던 특혜입니다.) 저는 2002년 8월부터 Python-Dev Summaries(요약)를 다시 부활시키는 일을 하였는데 (이후 2년 반동안 계속하였습니다.) 요약을 정리하면서 수정이 필요한 잡다한 이슈를 꽤 자주 건드리곤 했습니다. 이미 python-dev 리스트에는 자주 참여했기 때문에 사람들에게 저의 패치를 확인하여 대신 커밋해달라고 부탁했었습니다. 어느 날 Guido가 왜 직접 커밋하지 않느냐고 물어오길래 저는 커밋 권한이 없다고 대답하였습니다. Guido는 바로 "이제 할 수 있을 거에요"라고 했습니다.

나의 첫 커밋(체인지셋 28686)은 time.strptime()에 문자열 이스케이프를 수정한 것으로 파이썬 자체에 대해 제가 처음으로 기여한 것입니다.

현재 파이썬의 어떤 부분을 작업하고 있습니까?

import 체계 쪽과 파이썬 언어가 모든 VM에서 잘 동작하도록 하는 쪽에 관심을 두고 있습니다.

코어 개발 작업을 하지 않을 때에는 파이썬으로 무엇을 하십니까?

제 박사 학위 논문의 서버 쪽 부분을 파이썬으로 구현하려고 했습니다. 그 밖에 개인적인 모든 프로젝트에 가능한 한 파이썬을 사용하려고 합니다. 앞으로 Google에서 할 일도 대부분 파이썬을 사용할 것입니다.

프로그래밍을 하지 않을 때에는 무엇을 하십니까?

저는 TV로 넘어온 엄선된 영화를 즐겨보는 매니아입니다. (2000년 여름에 무더위로 텔레비전을 잃어버린 것은 뜻하지 않게 제게 일어났던 일 중의 최고였습니다. 제 의지로 했던 일 중의 최고는 아내와 결혼한 것입니다.) 아니면 무엇인가 열심히 읽습니다. 대개 잡지나 웹 사이트이지만 책도 항상 읽는 중입니다.

2011년 8월 20일 토요일

팀과 만남: Michael Foord

원문: Meet the Team: Michael Foord (날짜: 2011-08-08, 작성자: Brian Curtin)

이 글은 "팀과 만남" 시리즈 중의 하나로, 파이썬 코어 개발팀을 간단히 소개합니다.

이름:Michael Foord
사는 곳:영국 노샘프턴
홈페이지:http://www.voidspace.org.uk/

파이썬을 사용한 지는 얼마나 되었습니까?

처음에는 취미로 2002년부터 파이썬을 사용했습니다. 일로서는 2006년도에 파이썬을 사용하기 시작했습니다. 파이썬 프로그래밍의 시작은 Play By Email 게임에서 정보를 수집하는 프로그램을 작성하려는 사람들과 함께 한 것이 계기가 되었습니다. 우리 중 누구도 한동안은 프로그램을 작성하지 못하였고 그때 막 Smalltalk을 사용하기로 했었으나 누군가가 파이썬으로 해보자고 제안했습니다. 그 후로 저는 순식간에 파이썬에 빠져들었습니다.

코어 커미터가 된 지는 얼마나 되었습니까?

2009년 PyCon에서 코어 커미터가 되었습니다. 원래 IronPython에 관여했기 때문에 이루어진 것입니다.

코어 개발자로 출발은 어땠습니까? 처음 한 커밋을 기억하고 있습니까?

PyCon 2009 스프린트 동안 Gregory Smith와 또 다른 코어 개발자와 함께 Google이 unittest에 기여한 개선 사항을 통합하는 일을 하였습니다.

현재 파이썬의 어떤 부분을 작업하고 있습니까?

PyCon 스프린트에서 unittest에 대한 초기 작업을 한 후로 유지 보수 담당자가 따로 없었던 unittest에 대한 여러 문제점을 수정하고 개선하는 일을 하였습니다. 그 후 unittest의 유지 보수 담당자가 되었지만 표준 라이브러리의 다른 부분에도 기여하였습니다.

또한, Planet Python을 관리하는 것, PSF 회원이 되는 것, python.org webmaster 앨리어스에서 도움을 주는 것 등과 같은 여러 가지 방법으로 파이썬을 지원하고 있습니다.

코어 개발 작업을 하지 않을 때에는 파이썬으로 무엇을 하십니까?

본업으로는 Canonical에서 웹 개발을 합니다. Canonical 웹 사이트의 웹 서비스 기반 구조를 일부 작업하였고 Ubuntu와 통합되는 서비스도 몇 가지 작업했습니다. 정말 재미있는 일이었고 그들은 훌륭한 팀입니다.

여가 시간에는 unittest2 (unittest의 개선 사항을 다른 플랫폼으로 백포트), mock (목 객체를 제공하고 테스트에서 몽키 패치를 지원하는 테스팅 라이브러리)과 같은 프로젝트나 그 밖의 여러 조그만 프로젝트들을 작업합니다.

집필 작업도 더 하고 싶지만 지난 2년간 IronPython in Action 책을 쓰는데 헌신을 다한 관계로 당장은 이와 같은 큰 규모의 글쓰기 프로젝트를 또 할 것 같지는 않습니다.

프로그래밍을 하지 않을 때에는 무엇을 하십니까?

노샘프턴(영국)에 있는 교회에서 열심히 활동하고 있습니다. 상당한 시간을 쏟아 우리가 운영하는 자선 단체의 행정 업무를 돕고 있습니다. 이것은 Canonical에서 일하는 것이 좋은 이유 중의 하나입니다. 집에서 일할 수 있고, 여기에 뿌리를 내렸기 때문에 다른 곳으로 옮겨가지 않을 것입니다. (확실히 날씨 때문에 있는 것은 아닙니다.) 말할 필요도 없이 노샘프턴에는 파이썬 프로그래밍 일이 많지는 않습니다. 나의 첫 전업 프로그래밍 일은 편도로 두 시간 걸리는 통근을 하면서 런던에 있는 놀라운 팀과 함께 하였습니다. 4년간이나 그렇게 다니면서 그 일을 정말 즐겼었지만, 통근에서 해방된 관계로 다시 돌아가고 싶지는 않습니다.

XBox로 게임을 즐기기도 합니다. 불행히도 내가 좋아하는 게임이 있으면 몇 주동안 그 게임에 빠지기 때문에 조심해야만 합니다. 이러한 이유로 월드 오브 워크래프트, 이브 온라인 등을 하지 않았습니다. 또한, 매월 노샘프턴에서 긱(geek) 모임을 운영합니다. 파이썬 사용자 그룹에는 파이썬 사용자가 충분히 많지 않지만 모든 방면의 긱들을 모으면 꽤 됩니다. 보통 펍에서 모여 수다를 떨거나 자신의 최신 디지털 기기를 자랑합니다.

2011년 7월 12일 화요일

Windows용 파이썬 실행기

원문: A Python Launcher For Windows (날짜: 2011-07-11, 작성자: Paul Moore)

pywin32의 저자이자 오랫동안 Windows에서 파이썬 지원을 위해 노력해오신 Mark Hammond 님이 새로운 Windows용 파이썬 실행기를 주제로 한 PEP 397을 작성해 주셨습니다. 표준 라이브러리 logging 모듈의 저자인 Vinay Sanjip 님은 최근 이 실행기에 대한 구현을 작성해 주셨습니다. 구현은 https://bitbucket.org/vinay.sajip/pylauncher/downloads에서 다운로드 하실 수 있습니다.

새로운 실행기는 Windows에서 파이썬 스크립트(.py.pyw 파일)에 사용하려는 파이썬 버전을 지정할 수 있어서 파이썬 2와 3을 동시에 사용할 수 있도록 해줍니다.

Windows 사용자께서는 새 실행기를 다운로드하고 테스트해 주셔서 파이썬 개발자가 남은 문제를 해결하는데 도움을 주셨으면 합니다. 실행기는 독립 프로그램으로 패키징되어 있고 현재 나와있는 파이썬 버전들을 지원합니다. 실행기가 최종적으로 완성되면 파이썬 3.3에 포함될 것입니다. (독립 패키지도 이전 버전 파이썬 사용자를 위해 계속 제공됩니다.)

실행기는 두 가지 버전으로 제공됩니다. - launcher.msi는 실행기를 Program Files 디렉터리에 설치하고 launchsys.msiSystem32 디렉터리에 설치합니다. (64비트 Windows용으로 64비트 버전도 제공됩니다.)

실행기에 대한 자세한 설명

실행기 동작에 대한 전체 명세는 PEP 397에 있습니다. 기본 원리를 요약하자면:

  • 실행기는 두 가지 실행 파일을 제공합니다. - py.exe(콘솔 버전)과 pyw.exe(GUI 버전)
  • 실행기는 .py(콘솔)과 .pyw(GUI) 파일 확장자에 대한 핸들러로 등록됩니다.
  • 스크립트가 실행되면 실행기는 스크립트에서 Unix 스타일의 #!(쉬뱅) 행을 찾아봅니다. 실행 파일 이름으로 python (시스템 기본 파이썬), python2 (기본 파이썬 2 릴리스), python3 (기본 파이썬 3 릴리스)을 인식합니다. 이것은 사용자 별, 컴퓨터 별로 자세히 설정할 수 있습니다.
  • py.exe 명령이 독립적으로 실행될 때에는 파이썬 대화식 인터프리터를 실행시킵니다. 명령 행 스위치가 지원되어서 py -2는 파이썬 2를, py -3은 파이썬 3을, py는 기본 버전을 실행합니다.

간단 사용 설명서

실행기는 설치가 되면 자신을 .py.pyw 스크립트에 연결시킵니다. 다른 조작을 하지 않았다면 스크립트는 컴퓨터에 설치된 기본 파이썬을 사용하여 실행될 것입니다. 그러므로 전과 차이는 없을 것입니다. 콘솔을 자주 사용한다면 .pyPATHEXT 변수에 추가해서 스크립트가 별도의 콘솔에서 실행되지 않도록 하면 좋습니다.

파이썬 2를 사용해야 하는 스크립트에는 첫 행에 다음을 추가합니다.

#!/usr/bin/env python2

(이는 Unix와 호환되는 형식입니다. Unix 호환성이 필요 없다면 #!python2라고 해도 됩니다.)

반대로 파이썬 3을 사용해야 하는 스크립트에는:

#!/usr/bin/env python3

을 첫 행에 추가합니다.

파이썬 인터프리터를 다음과 같은 명령을 통하여 시작할 수 있습니다.:

# 기본 파이썬 버전
py
# 파이썬 2
py -2
# 파이썬 3
py -3

위와 같이 사용하려면 py.exe 실행 파일이 실행 경로 상에 있어야 하는데 launchsys 버전의 설치 프로그램을 사용했다면 자동으로 됩니다. launcher.msi 버전은 설치 디렉터리 (C:\Program Files\Python Launcher)를 수동으로 PATH에 추가해야 합니다.

더 읽을거리

다음 python-dev 메일 스레드들은 핵심 논의 사항을 다룹니다:

2011년 7월 8일 금요일

3.2.1 릴리스 후보 2가 나왔습니다

원문: 3.2.1 Release Candidate 2 Released (날짜: 2011-07-06, 작성자: Brian Curtin)

6월의 릴리스에 이어 3.2.1의 두 번째 릴리스 후보가 지금 막 나왔습니다. 5월 15일에 있었던 첫 번째 릴리스 후보 이후로 40가지가 넘는 문제를 고쳐졌습니다. 여러분 모두 3.2.1 최종 릴리스 전의 마지막 모습을 확인하신다는 차원에서 각자의 프로젝트에 이 릴리스 후보를 테스트해 보시기를 바랍니다.

무엇이 고쳐졌을까?

I/O

#1195는 고쳐지지 않은 채로 몇 년이 지났습니다. 그러나 fgets을 호출하기 전에 오류 상태를 초기화하는 간단한 수정만으로 input() 내에서 CTRL-D가 sys.stdin.read()를 중단시키는 문제를 해결하였습니다. io 시스템은 #12175에서 read()None을 반환하면 readall() 메소드도 None을 반환하도록 하였고, 파일을 열지 못할 때에는 ValueError를 발생하도록 했습니다.

RC2에서 등장한 것은 아니지만 3.2.1의 중요한 수정 사항인 #11272는 Windows에서 input()의 끝에 붙어 오는 \r 문제를 고친 것입니다. 이 문제는 수차례 보고된 바 있고 여러 사람이 겪고 있는 문제이므로(distutils의 upload 명령 등?) 3.2.1이 해결책이 될 수 있기를 희망합니다.

Windows

3.2.0은 Windows에 os.symlinks 지원이라는 새 기능을 추가하였는데 덕분에 #12084가 문제가 되었습니다. os.stat가 Windows 심볼릭 링크를 잘못 계산하고 있었던 것으로 밝혀져 stat 함수의 여러 가지 내부 동작을 수정했었습니다.

한 사용자가 os.path.isdir이 느리다는 것을 밝혀냈는데, 그 원인은 os.stat로 특히 심볼릭 링크를 계산할 때가 문제가 됩니다. (일반적으로 보통 파일보다 두 배는 느려짐) 누구에게도 os.path.isdir이 성능상의 병목이 되지는 않지만, 인터프리터가 시작될 때 여러 차례 호출되므로 #11583에서 GetFileAttributes를 사용하도록 하여 기동 시 속도를 조금 높였습니다.

subprocess

Popen 객체를 생성할 때 올바르지 않은 인자를 넘기면 AttributeError가 발생했습니다. 이것은 #12085로 보고되었고 보고한 사람이 고쳐주었습니다. 3.2.0에서 변경된 것 때문에 Popen에서 환경 변수가 비어있을 때, 특히 env 인자를 제대로 처리하지 못하였습니다. 이 문제는 #12383으로 올라와 바로 고쳐졌습니다.

...그 밖에!

3.2.1 RC2의 전체 변경 사항을 보려면 변경 로그를 확인하시고 지금 바로 다운로드 해보십시오!

늘 그렇듯이 문제를 발견하시면 http://bugs.python.org로 알려주세요. 고품질의 파이썬 릴리스를 제작할 수 있도록 도움을 주셔서 고맙습니다.

2011년 6월 15일 수요일

6월의 릴리스 - 2.6.7, 2.7.2, 3.1.4

원문: June Releases - 2.6.7, 2.7.2, 3.1.4 (날짜: 2011-06-14, 작성자: Brian Curtin)

현재 유효한 브랜치 모두에서 업데이트가 나온 6월은 파이썬 릴리스에 있어서 큰 의미가 있는 달입니다.

2.6.7

새로 릴리스된 파이썬 2.6.7은 소스 코드만 제공되며 보안 문제 세 가지를 고쳤습니다. 이제 2.6 계열은 보안 모드에 있기 때문에 2013년 10월까지 소스 코드 형태로만 필요에 따라 릴리스될 것입니다. 바이너리 설치가 필요하면 2.7이나 3.2로 업그레이드 하시길 바랍니다.

2.6.7은 앞서 urllib 취약점에서 다루었던 수정 사항이 반영된 첫 릴리스입니다. 거기에 추가로 smtpd DoS 취약점(이슈 #9129)과 SimpleHTTPServer.list_directory XSS 취약점(이슈 #11442)도 고쳤습니다.

2.7.2

2.x 대의 최종 마이너 버전인 2.7은 2010년 11월에 2.7.1이 릴리스된 후로 150개가 넘는 버그 수정이 이루어졌습니다. 2.7.2는 2.6.7에서 언급한 보안 문제 수정을 모두 포함하고 있으며, 소스 및 바이너리 설치 프로그램은 6월 12일부터 사용하실 수 있습니다.

여러 가지 죽는(crash) 문제가 고쳐졌습니다. 여기에는 파이썬이 파이썬 밖에서 관리하는 메모리를 다른 스레드가 수정하는 동안 부적절하게 사용하는 상황, 클래스에서 __abstractmethods__를 삭제하는 경우, 메모리 맵(memory-mapped) 파일을 그 크기를 넘어서 접근할 때 등이 있습니다.

getpass에서는 CTRL-C 및 CTRL-Z 처리에 일어난 퇴보를 바로 잡았습니다. multiprocessing에는 Windows 서비스를 동결된(frozen) 실행 파일과 같이 처리한 것과 multiprocessing.Pool의 워커(worker)를 종료할 때의 경쟁 조건을 바로 잡은 것을 포함하여 여러 가지 수정이 있었습니다. mmap은 32비트 빌드에서도 4 GB 이상의 파일 크기와 오프셋에 작동하도록 수정되었고 쓰기 불가능한 맵(map)에 쓰기를 시도할 경우 세그폴트를 내지 않고 TypeError를 발생하도록 하였습니다.

전체 변경 사항은 2.7.2 새 소식 파일을 참고하세요.

3.1.4

3.1.4는 3.1.x 대의 최종 버그 수정 릴리스로 3.2 대로 옮겨감에 따라 3.1은 보안 모드에 접어듭니다. 3.1.4는 2010년 11월에 3.1.3이 릴리스된 이후의 100개가 넘는 버그 수정을 포함하고 있습니다. 2.7.2와 마찬가지로 6월 12일부터 바이너리 설치 프로그램을 사용할 수 있으며, 3.1.4는 2.6.7에서 언급한 보안 문제의 해결을 포함하는 첫 번째 3.x 릴리스입니다.

3.1.4는 객체에서 __dir__을 조회할 때 문제, os.statos.utime의 Windows 구현에서 2038년 이후 날짜 문제, 64비트 지원을 위한 여러 가지 문제들을 수정하였습니다. io 라이브러리는 읽은 것이 없을 때 None을 반환하고 다른 곳에서는 적절한 예외를 반환하도록 여러 군데가 변경되었습니다. 64비트 Windows에서 ctypes의 콜백(callback) 인자가 고쳐졌고 죽는 문제도 해결되었습니다.

전체 변경 사항은 3.1.4 새 소식 파일을 참고하세요.

3.2.1

3.2.1은 현재 릴리스 후보 단계에 있습니다. 첫 번째 릴리스 후보는 이미 완결되었고 두 번째가 곧 나올 예정입니다. 3.2 사용자분들은 릴리스 후보를 사용해 보시고 문제가 있는지 확인해 주시면 정말 고맙겠습니다. 보고할 버그가 있다면 bugs.python.org에 제출해 주시기 바랍니다.

2011년 6월 8일 수요일

파이썬 3.3에 새로 추가된 faulthandler 모듈은 디버깅을 도와줍니다

원문: New faulthandler module in Python 3.3 helps debugging (날짜: 2011-05-12, 작성자: Victor Stinner)

여러분의 프로그램 사용자가 프로그램이 죽거나 멈춘다고 보고해 온다면 여러분이 할 수 있는 일은 그 사용자가 더 많은 정보를 모을 수 있도록 하거나 그 상황을 재현할 수 있는 시나리오를 만들어 내도록 돕는 것 뿐입니다. 사용자의 확실한 시나리오라 할지라도 환경이 서로 달라서(예를 들자면 운영 체제나 컴파일러) 개발자가 그 상황을 재현하지 못하기도 합니다. 운이 좋은 경우는 사용자가 디버깅 도구를 설치하기도 하지만, 대부분은 같은 상황에 대해 다른 누군가가 더 많은 정보를 얻어줄 때까지 기다려야만 할 것입니다.

심각한 오류

파이썬 3.3에서 새로 추가된 faulthandler 모듈이 이런 문제에 도움이 됩니다. faulthandler는 세그멘테이션 폴트, 0으로 나눔, 어보트(abort), 버스 오류와 같은 심각한 오류 상황에서 파이썬 트레이스백(traceback)을 기록해주는 기능을 제공합니다. 이 기능은 프로그램에서 faulthandler.enable()를 사용하거나 파이썬 실행 파일에 -X faulthandler 옵션을 주거나 환경 변수를 PYTHONFAULTHANDLER=1로 설정하여 활성화할 수 있습니다. 출력의 예:

Fatal Python error: Segmentation fault

Current thread 0x00007f7babc6b700:
  File "Lib/test/crashers/gc_inspection.py", line 29 in g
  File "Lib/test/crashers/gc_inspection.py", line 32 in <module>
Segmentation fault

타임아웃

faulthandler는 또한 faulthandler.dump_tracebacks_later(timeout)를 사용하면 주어진 타임아웃 후에 트레이스백을 기록해줍니다. 이 함수를 다시 호출하면 타이머는 재시작되며, faulthandler.cancel_dump_tracebacks_later()를 호출하면 타이머는 중단됩니다. 출력의 예:

Timeout (0:01:00)!
Current thread 0x00007f987d459700:
  File "Lib/test/crashers/infinite_loop_re.py", line 20 in <module>

repeat=True 옵션을 사용하면 매 timeout 초마다 기록해줍니다. exit=True를 사용하면 안전하지 않은 방식으로(예를 들면 파일을 플러시하지 않음) 바로 프로그램을 종료시킵니다.

사용자 시그널

프로그램이 실행 중인 호스트에 접근할 수 있다면 faulthandler.register(signal)를 사용하여 signal을 받았을 때 트레이스백을 기록하도록 시그널 핸들러를 설치해 둘 수 있습니다. 예를 들면, UNIX에서는 SIGUSR1 시그널을 활용할 수 있습니다. kill -USR1 <pid>로 현재 트레이스백을 기록할 수 있을 것입니다. 이 기능은 Windows에서는 사용할 수 없습니다. 출력의 예:

Current thread 0x00007fdc3da74700:
  File "Lib/test/crashers/infinite_loop_re.py", line 19 in <module>

다른 사용법으로 프로그램에서 직접 faulthandler.dump_traceback()를 호출하는 것도 가능합니다.

보안 문제와 출력 파일

보안상의 이유로 기본적으로 faulthandler는 비활성화 되어 있습니다. 주된 이유는 sys.stderr의 파일 디스크립터를 저장했다가 그 파일 디스크립터로 트레이스백을 기록하기 때문입니다. 만약 sys.stderr가 닫힌 후 그 파일 디스크립터가 재사용 된다면 그 파일 디스크립터는 소켓, 파이프, 중요한 파일, 또는 다른 어떤 것이 될 수 있습니다. 기본적으로 faulthandler는 트레이스백을 sys.stderr에 기록하지만 다른 파일을 지정할 수 있습니다. 자세한 내용은 faulthandler 문서를 참고하시기 바랍니다.

예전 파이썬 버전을 위한 외부 모듈

faulthandler는 파이썬 2.5에서 3.2를 위해 PyPI에 외부 모듈로도 유지 보수되고 있습니다. 파이썬 3.3의 모듈과 이 외부 모듈의 가장 큰 차이는 dump_tracebacks_later()의 구현에 있습니다. 파이썬 3.3은 잠금에 타임아웃을 주어 쓰레드를 사용하는 반면 외부 모듈은 SIGALRMalarm()을 사용합니다.

잠금 타임아웃은 파이썬 3.3의 새로운 기능으로 마이크로초 단위의 정밀도를 갖습니다. 예전 버전에서 사용되는 alarm() 타이머는 1초의 정밀도를 갖으며 SIGALRM 시그널은 실행 중인 시스템 호출을 EINTR 오류를 내면서 실패하도록 하여 중단시킬 수 있습니다.

초기 성공 사례

새로 추가된 faulthandler 모듈은 이미 우리의 빌드봇(buildbot)에서 경쟁 조건을 추적하는데 도움을 주었습니다. 이 모듈이 여러분의 프로그램에서도 도움이 되기를 희망합니다.