2012-07-11 71 views
3

我是新来的,这是我的第一个问题。我在Python 3.2.3中做了一个游戏,我遇到了一个问题,那就是Timer对象在调用start()方法后有时会崩溃解释器(它发生的时间就像是50%的时间,总会有一个错误窗口说: Python停止工作,不得不被终止)。Python定时器崩溃解释器

我已经简化了我的代码,这样我就可以找到问题,我发现这个非常简单的代码崩溃我的翻译:

from threading import Timer 

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

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

我试着修理我的Python安装目录,这没”工作。我在Windows 7下运行Python,不幸的是,到目前为止还没有机会尝试其他操作系统,所以如果任何人有任何关于此问题的经验,我将不胜感激任何解决方案。感谢大家。

+0

这里没有错误,使用Python 3.2.3在Windows 7 – 2012-07-11 12:22:50

+0

这简化版本崩溃的100%的时间?在Windows 7下,我无法让v2.7.2或3.2.3崩溃。在Linux下(在VirtualBox VM中)也可以使用v 2.6.5 – Levon 2012-07-11 12:23:04

+0

适用于OSX 10.7.4 python 2.7.3 – GP89 2012-07-11 12:43:03

回答

1

我重建了你的问题,你的代码对我来说工作得很好。 你可能想考虑使用时间库?

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

这可能是一个更安全的解决方案,但我建议你更新你的操作系统并重新安装python。试图与python2.7?

+0

睡眠障碍家伙.... – 2012-07-11 12:28:27

+0

我还没有尝试过Python 2.7,但我会尽快做到,会让你知道结果。我不能使用睡眠,因为我需要它是多线程的,游戏必须在计时器等待并触发事件时运行。 – 2012-07-11 14:04:43

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对象,仍然无法工作。我通过命令行将脚本作为新的进程运行,而不是以交互模式运行。猜猜我只需要重新安装一切,看看它是否有效。 – 2012-07-11 14:12:24

+0

@MiloslavČíž - 我很遗憾听到 - 是的,如果没有,请在操作系统上标记问题,并指出涉及的Python和操作系统的确切版本以及崩溃的确切症状(就像错误信息)。 – 2012-07-11 14:20:43

1

所以问题解决了,重新安装Python帮助。然而,修复安装没有,这可能是一件好事。谢谢你的帮助。