2012-07-11 3 views
3

저는 여기 새로 왔는데 이것은 제 첫 질문입니다. 나는 파이썬 3.2.3에서 게임을 만들고 있는데 타이머 오브젝트가 때때로 start() 메서드라고 부른 후에 인터프리터를 충돌시키는 문제에 봉착했다. (이는 시간의 50 %와 같이 발생한다. 파이썬은 작동을 멈추고 종료되어야했습니다.)파이썬 타이머가 인터프리터를 충돌시킵니다.

from threading import Timer 

def hello(): 
    print("hello, world") 

t = Timer(1.0, hello) 
t.start() 

내가 내 파이썬 소 instalation 수리를 시도했습니다, 'didn를 :

나는 그래서 이것은 매우 간단한 코드 내 통역 충돌 것을 내가 문제를 찾을 수 있고, 내가 발견 한 내 코드를 단순화했습니다 일하지 마라. Windows 7에서 Python을 사용하고 있으며 다른 운영 체제를 사용해 볼 기회가 없었기 때문에이 문제에 대해 경험이있는 사람이라면이 솔루션을 사용해 주셔서 감사합니다. 모두에게 감사드립니다.

+0

Windows 7에서 python 3.2.3을 사용하여 오류가 없습니다 –

+0

이 단순화 된 버전은 100 % 시간을 충돌합니까? Windows 7에서 v 2.7.2 또는 3.2.3으로 인해 충돌이 발생하지 않았습니다. 또한 Linux (VirtualBox VM)에서 v 2.6.5 – Levon

+0

OSX 10.7.4 python 2.7.3 – GP89

답변

1

문제가 재구성되었으므로 코드가 올바르게 작동합니다. Time 라이브러리 사용을 고려해보십시오.

from time import sleep 
def hello(): 
    print('hello world') 
sleep(1) 
hello() 

이 방법이 더 안전 할 수도 있지만 OS를 업데이트하고 Python을 다시 설치하는 것이 좋습니다. python2.7로 시도 했습니까?

+0

수면 블럭은 .... –

+0

아직 파이썬 2.7을 시도하지는 않았지만, 가능한 한 빨리 할 예정입니다. 결과에 대해 알려 드리겠습니다. 다중 스레드가 필요한 경우 잠을 사용할 수 없으며 타이머가 대기하고 트리거되는 동안 게임이 실행되어야합니다. –

1

스크립트가 완료된 후에는 스레드 나 타이머를 뒤에 두어서는 안됩니다. 그러나, 나는 그 문제를 겪지 않는다 다음은, 안정적으로 시스템에서 작동한다고도 확실하지 않다 :

# This is NOT the suggested fix 

from threading import Timer 

def hello(): 
    print("hello, world") 

t = Timer(1.0, hello) 
t.start() 
sleep(2)  

다른 사람들이 문제를 용납하지 않는다 재현하려는 이유는 그들이 실행하는 것이있다 스크립트를 독립 실행 형 프로세스로 사용하고 해당 프로세스가 종료 될 때 운영 체제에서 타이머를 등록 해제하고 대화 형 모드에서 작업하는 것으로 가정합니다.

실제 해결책은 타이머 및 스레드 작업을 위해 대화식 모드 사용을 중단하는 것입니다.

기타 배경 here.

+0

이 코드를 시도했지만 여전히 충돌이 발생했습니다. 스크립트 끝 부분에서 Timer 개체를 삭제하려고 시도했지만 여전히 작동하지 않습니다. 대화 형 모드가 아닌 새로운 프로세스로 명령 줄을 통해 스크립트를 실행합니다. 모든 것을 다시 설치하고 작동하는지 확인해야합니다. –

+0

@ Miloslavííž - 유감스럽게 생각합니다. 예, 그렇습니다. 운영체제에 질문을 태그하고 관련 Python 및 OS의 정확한 버전과 충돌의 정확한 증상을 표시하십시오 (오류 메시지와 같이). –

1

그래서 문제가 해결되면 파이썬을 다시 설치하면 도움이됩니다. 그러나 수리 설치는 알지 못할 수도 있습니다. 당신의 도움을 주셔서 감사합니다.

관련 문제