Python Timer 使解释器崩溃

Posted

技术标签:

【中文标题】Python Timer 使解释器崩溃【英文标题】:Python Timer crashes the interpreter 【发布时间】:2012-07-11 01:31:36 【问题描述】:

我是新来的,这是我的第一个问题。我正在用 Python 3.2.3 制作游戏,我遇到了一个问题,即 Timer 对象在调用它的 start() 方法后有时会使解释器崩溃(它发生的概率为 50%,总是有一个错误窗口说 Python 停止工作,必须终止)。

我一直在简化我的代码,以便找到问题所在,我发现这个非常简单的代码会使我的解释器崩溃:

from threading import Timer

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

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

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

【问题讨论】:

这里没有错误,在 Windows 7 上使用 python 3.2.3 这个简化版 100% 的时候崩溃?在 Windows 7 下,我无法使用 v 2.7.2 或 3.2.3 崩溃。在具有 v 2.6.5 的 Linux(在 VirtualBox VM 中)下也可以 在 OSX 10.7.4 python 2.7.3 上为我工作 @Levon 简化的代码大约有 50% 的时间崩溃,而不是 100%。感谢您的反馈,我可以看到这可能不是一个糟糕的 Python 代码问题,但更有可能是我的系统有问题,将尝试重新安装所有内容并查看它是否有效。 【参考方案1】:

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

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

这对您来说可能是一个更安全的解决方案,但我建议您更新操作系统并重新安装 python。用python2.7试过了吗?

【讨论】:

我还没有尝试过 Python 2.7,但我会尽快尝试,结果会告诉你。我不能使用睡眠,因为我需要它是多线程的,游戏必须在计时器等待和触发事物时运行。【参考方案2】:

脚本完成后,您不应留下线程或计时器。但是,我什至不确定以下不会出现该问题的系统是否可以可靠地在您的系统上运行:

# 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.

【讨论】:

我已经尝试过这段代码,但它仍然崩溃,我还尝试在脚本末尾删除 Timer 对象,仍然无法正常工作。我通过命令行运行脚本作为一个新进程,而不是在交互模式下。我想我只需要重新安装所有东西,看看它是否有效。 @MiloslavČíž - 很遗憾听到这个消息 - 是的,如果没有,请用您的操作系统标记问题并指出所涉及的 Python 和操作系统的确切版本,以及崩溃的确切症状(如错误消息)。【参考方案3】:

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

【讨论】:

以上是关于Python Timer 使解释器崩溃的主要内容,如果未能解决你的问题,请参考以下文章

VB6 Timer(), Space() Form_Initialize() 导致立即崩溃

Python学习—异常

python的异常处理

Python是不是应该崩溃?

如何使 python 命令行程序自动完成任意事物而不是解释器

异常处理