2012-07-12 69 views
0

我有一个Python脚本,看起来像这样:Python的循环超时

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

我知道这是不好的做法来处理这样的错误,但是这是一个脚本,我只打算使用一次。无论如何,我注意到循环有时会卡住一个特定的id(x)并冻结几个小时。

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

+0

您正在使用什么操作系统? – mgilson 2012-07-12 16:19:41

+1

线程它,我认为这是实现超时的最佳方式。 – Maresh 2012-07-12 16:21:13

+0

可能的重复http://stackoverflow.com/q/11403275/748858 – mgilson 2012-07-12 16:22:42

回答

1

如果你想让它去的只有20秒我建议查找使用Python创建信号处理程序,您可以将其定义为一个TimeoutException

except TimeoutException, e: 
print e 
pass 

。下面是一个示例和一个链接到它的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

+0

我不认为信号将在Windows上工作,因为没有'SIGALRM' – mgilson 2012-07-12 16:28:38

+0

我已经完成了'除了异常,E:'应该不处理所有的异常?循环冻结了几个小时,没有打印错误,只是重新开始。 – Kush 2012-07-12 16:38:15

+0

是的,我看到如果你在Linux上运行,你可以在20秒内使用'SIGALRM'来定时。但是,你有Windows,所以你将不得不使用线程。看到我的链接到python:windows等效...它显示了如何编写一个类似的功能在两个操作系统上运行。 – Alex 2012-07-12 16:41:48