【问题标题】:Python loop timeoutPython循环超时
【发布时间】:2012-07-12 16:16:14
【问题描述】:

我有一个看起来像这样的 Python 脚本:

for x in range(1000,40000):
    try:
       some_function(x)
       some_other_function(x)
    except Exception, e:
       print e
       pass

我知道这不是处理此类错误的好习惯,但这是一个我只会使用一次的脚本。无论如何,我注意到循环有时会卡在一个特定的 id (x) 上并冻结几个小时。

所以我的问题是:我将如何在循环中实现超时功能,以便如果需要超过 20 秒然后跳到下一个?

【问题讨论】:

  • 线程它,我认为这是实现超时的最佳方式。
  • @mgilson - Windows 7。我查看了该线程,但不确定如何实现它。这是我的第一个 Python 脚本,所以我是业余爱好者(我是 C++ 程序员)
  • @DopeMonk 你是对的。这是一个不同的问题。另一个问题想退出程序,你只想退出循环。
  • 我建议找出函数卡住的原因并在尽可能低的级别解决该问题,而不是用超时来解决问题。

标签: python timeout


【解决方案1】:

您可以将其定义为 TimeoutException

except TimeoutException, e:
print e
pass

如果您希望它只运行 20 秒,我建议您查找在 python 中创建信号处理程序。这是一个示例和指向它的 python 文档的链接。 https://docs.python.org/library/signal.html

https://web.archive.org/web/20130511171949/http://pguides.net/python-tutorial/python-timeout-a-function/

由于您使用的是 Windows,您可能想查看这个较旧的线程 python: windows equivalent of SIGALRM

【讨论】:

  • 我认为信号不会在 Windows 上工作,因为没有 SIGALRM
  • 我已经完成了except Exception, e: 不应该处理所有的异常吗?循环冻结了几个小时,没有打印任何错误,它只是重新开始
  • 是的,我看看你是否在 Linux 上运行了这个,你可以使用 SIGALRM 让你在 20 秒内超时。但是,您有 Windows,因此您将不得不使用线程。请参阅我的 python 链接:windows 等效...它显示了如何编写类似的函数以在两个操作系统上运行。
猜你喜欢
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 2021-10-26
  • 2018-01-18
  • 2021-11-03
  • 1970-01-01
  • 2016-01-16
  • 1970-01-01
相关资源
最近更新 更多