1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- """
- Copyright (c) Contributors to the Open 3D Engine Project.
- For complete copyright and license terms please see the LICENSE at the root of this distribution.
- SPDX-License-Identifier: Apache-2.0 OR MIT
- Functions that repeatedly run until a condition is met
- """
- import time
- def wait_for(fn_act, timeout=30, exc=None, interval=1):
- """
- Continues to execute a given function until the function returns True. Raises an exception if the function does
- not return True before the timeout
- :param fn_act: The target function to execute
- :param timeout: The set amount of time before raising an exception
- :param exc: The exception to raise. An assertion error is raised by default
- :param interval: The time to wait between subsequent function calls
- """
- timeout_end = time.time() + timeout
- while not fn_act():
- if time.time() > timeout_end:
- if exc is not None:
- raise exc
- else:
- assert False, 'Timeout waiting for {}() after {}s.'.format(fn_act.__name__, timeout)
- time.sleep(interval)
- def wait_while(fn_act, timeout, exc=None, interval=1):
- """
- Continues to execute a given function until the specified amount of time has passed. Raises an exception if the
- function does not return True during this time.
- :param fn_act: The target function to execute
- :param timeout: The set amount of time to wait
- :param exc: The exception to raise. An assertion error is raised by default
- :param interval: The time to wait between subsequent function calls
- """
- timeout_end = time.time() + timeout
- while time.time() < timeout_end:
- if not fn_act():
- if exc is not None:
- raise exc
- else:
- assert False, '{}() failed while waiting for {}s'.format(fn_act.__name__, timeout)
- time.sleep(interval)
|