2013-06-10 3 views
2

python이 py (py)의 컴파일 단계에서 시스템 (및 디스크)의 갑작스런 전원 차단으로 인해 손상된 pyc를 감시 할 수 있는지 궁금해합니다. 시스템이 다시 가동되면 존재할 수있는 pyc는 무결성을 확인하기 위해 으로 간주되며 해당 의심되는 것으로 간주되면 재생성됩니까?전원 순환시 Python pyc가 가능합니까?

답변

0

내가 아는 한, 컴파일 - 바이트 코드 프로세스는 정상적으로 make과 동일하게 작동하여 재 컴파일을 처리합니다. 컴파일 된 파일이 원본 파일보다 오래된 파일인지 확인하고, 컴파일 된 파일이 원본 파일보다 오래된 파일인지 확인합니다. 내 최선의 제안은 갑자기 정전이 의심 될 때마다 PYC 파일을 지우고 새 파일을 가져 오기 위해 가져 오는 것입니다 (이 작업을 자동화하여 간단하게 만들 수 있습니다).

필자는 디스크에 쓰기 전에 바이트 코드 파일이 완료 될 때까지 Python이 대기하는지 실험하지는 않았습니다. 실제로 컴파일하는 동안 정전이 발생하면 PYC 파일이 디스크에 쓰여지 지 않기 때문에 일종의 부패 가능성을 줄일 수 있습니다. 그러나 파일 핸들이 닫히지 않고 파일이 쓰기 액세스로 열릴 때 대부분의 OS가 파일의 수정 시간을 업데이트한다고 생각하기 때문에 쓰기 도중 전원이 끊어지면 손상이 여전히 문제가 될 수 있습니다.

+0

감사합니다. @JAB; 갑작스런 전력 손실을 일으킬 수있는 원격 필드 시스템과 함께 작업하고 손상된 pyc를 봅니다. 방금 본 버그 스레드 (http://bugs.python.org/issue13146)도 있습니다. 에 관계없이, pyc 생성을 명시 적으로/완전히 시스템 시작시 소리가 필요합니다. 짜증나지만 자동화 할 것입니다. 감사합니다. – user2471686

+0

사람들은 이전에 컴파일 된 비 루트 환경에서 파이썬 모듈을 업데이트하는 경우에도 비슷한 문제가 있습니다. root/더 높은 액세스 권한을 가진 사람과 새로운 PYC 파일은 액세스 제한으로 인해 기존 PYC 파일을 덮어 쓰지 않습니다. 따라서 Python 2.6 이상에서는 실제로 PYC 파일 생성을 비활성화 할 수 있습니다. 감소. http://stackoverflow.com/a/154617/138772 – JAB

0

this message을 올바르게 해석하면 Python 3.3은 .pyc 파일을 다른 이름으로 만들고 이름을 바꿔 성공적으로 완료합니다. 나는 이것이이 상황에서 "원자"(그들의 용어)라고 생각하며 갑작스런 충돌이나 권력의 상실로부터 당신을 확실히 보호 할 것입니다. 이전 버전 (2. * 분기 포함)은 여전히 ​​경합 조건 및 유효하지 않은 파일 .pyc에 종속되어 있습니다.

런타임 예외를 트리거하지 않고 파일을 유효하지 않을 수 있는지 여부는 별도의 질문입니다. 문제는 모든 가져 오기 실패에 대해 이야기합니다.

+1

py3.3에서 흥미 롭습니다. 감사 alexis; 내 pyc 파일 손상 가져 오기 실패 가져온 원인 pyc 본질적으로 null 파일 (같은 pyc 파일 크기가 비어 있었다면 그것은 wasnt) 비어 있습니다. – user2471686

+0

pyc 크기를 측정하는 방법을 잘 모르겠습니다 - 파일 시스템 그것은 비어 있다고, 그것은 비어 있습니다; 그러나 어쨌든 당신의 문제가 프로파일에 맞는 것처럼 들립니다. 대부분의 보고서는 동일한 pyc 파일을 동시에 작성하는 두 개의 python 프로세스와 같이 경쟁 조건으로 인해 손상된 파일에 대한 보고서입니다. – alexis