def timeout(max_timeout):
"""Timeout decorator, parameter in seconds."""
def timeout_decorator(f):
"""Wrap the original function."""
@functools.wraps(f)
def func_wrapper(self, *args, **kwargs):
"""Closure for function."""
pool = multiprocessing.pool.ThreadPool(processes=1)
async_result = pool.apply_async(f, (self,) + args, kwargs)
timeout = kwargs.pop('timeout_max_timeout', max_timeout) or max_timeout
# raises a TimeoutError if execution exceeds max_timeout
return async_result.get(timeout)
return func_wrapper
return timeout_decorator
decorators.py 文件源码
python
阅读 22
收藏 0
点赞 0
评论 0
评论列表
文章目录