a )g @sRddlmZmZmZeZddlZddlmZ dZ dZ Gddde Z d ddZdS) )absolute_importdivisionprint_functionN c@s eZdZdS) TimeoutErrorN)__name__ __module__ __qualname__r r F/usr/lib/python3.9/site-packages/ansible/module_utils/facts/timeout.pyrsr Timer expiredcs(fdd}tr$}d||S|S)z Timeout decorator to expire after a set number of seconds. This raises an ansible.module_utils.facts.TimeoutError if the timeout is hit before the function completes. csfdd}|S)Ncs}|durtdpt}tjdd}|||}|zDz||WW|Stj yvt d|Yn0W|n |0dS)NGATHER_TIMEOUT)Z processeszTimer expired after %s seconds) globalsgetDEFAULT_GATHER_TIMEOUTmpZ ThreadPoolZ apply_asynccloseZ terminatemultiprocessingr)argskwargsZ timeout_valuepoolres)funcsecondsr r wrapper(s  z+timeout..decorator..wrapperr )rrr)rr decorator'sztimeout..decoratorN)callable)rZ error_messagerrr rr timeout!s  r)Nr )Z __future__rrrtypeZ __metaclass__rZmultiprocessing.poolrrr r Exceptionrrr r r r s