2012-03-22 67 views

回答

1

找到this基于线程的解决方案,但如注释here,通常无法杀死Python中的线程,所以即使在线程“超时”之后它仍继续运行。但是,假设它不在C-land中,可以使用this实际终止线程。

不幸的是,它不是现成的食谱,但它看起来像它有你需要的所有部分。

-1

我不明白为什么Timeout装饰器不能在Windows上工作?

如果这是永久性的,而不仅仅是为了调试目的,您可以在方法内部使用for else循环。

def methodName(timeout): 
    for i in range(timout): 
     if done_doing_task: 
      break 
    else: #will only be executed if we don't break out of the for loop 
     raise Exception('method methodName timed out') 
+0

如果您检查['signal'](http://docs.python.org/library/signal.html)模块的文档,您会看到'signal.alarm()'(由超时装饰器使用)被列为纯UNIX。 – kindall 2012-03-22 23:44:11