在Python中使阻塞函数超时

时间:2015-07-01 12:40:40

标签: python multithreading

我有一个阻塞函数,有时它无限期挂起,它不是cpu绑定的,它正在访问外部的东西,它也是对非托管代码的调用。我希望这可以在Windows或Unix上运行

使用超时运行此方法的最佳做法是什么?我假设这将涉及运行一个新线程并有一个等待事件。对于代码行和cpu而言,我是最轻量级的。

由于

1 个答案:

答案 0 :(得分:0)

当您使用池和异步调用时,您将使用wait(timeout=None)方法等待超时结果:

>>> import multiprocessing
>>> p = multiprocessing.Pool()
>>> a = p.apply_async(None) # Replace None with the function to execute.
>>> help(a.__class__)
Help on class ApplyResult in module multiprocessing.pool:

class ApplyResult(builtins.object)
 |  Methods defined here:
 |  
 |  __init__(self, cache, callback, error_callback)
 |  
 |  get(self, timeout=None)
 |  
 |  ready(self)
 |  
 |  successful(self)
 |  
 |  wait(self, timeout=None)
[...]

concurrent.futures还有wait种方法或get超时。