Source code for ubcs_auxiliary.advsleep

"""
advance Sleep functions
author: Valentyn Stadnytskyi
data: 2017 - Nov 17 2018

functions:
psleep - precision sleep takes
intsleep with inputs t, dt and interupt as a function.

The precision sleep class.
functiob:
psleep - sleep specified amount of time with sub milisecond precision
test_sleep - for testing purposes. will print how much time the code waited.
This is important for the Windows platform programs if precise wait is required.
The Windows OS has ~15-17 ms latenct - the shortest time between attentions from OS.
"""
__vesrion__ = '1.0.0'
from time import  time, sleep
import sys
if sys.version_info[0] == 2:
    from time import clock as perf_counter
else:
    from time import perf_counter
import platform



[docs]def precision_sleep(t = 0.02, min_time = 0.017): """ sleep for t seconds. """ from time import time, sleep,perf_counter import platform min_time time_start = perf_counter() if platform.system() == 'Linux': sleep(t) #elif platform.system() == 'Darwin': # sleep(t) else: if t>min_time: sleep(t-min_time) time_left = t - (perf_counter() - time_start) time_while_start = perf_counter() while perf_counter() - time_while_start <= time_left: pass else: time_left = t - (perf_counter() - time_start) time_while_start = perf_counter() while perf_counter() - time_while_start <= time_left: pass
[docs]def interupt_sleep(t= 0.02,dt = 0.01, interupt = None): """precision sleep function with interupt capabilities input:t - time to sleep, dt - check intervals, interupt - interupt function that return boolean """ from time import perf_counter,sleep,time import types if not isinstance(interupt,types.FunctionType): precision_sleep(t) else: time_start = perf_counter() while perf_counter() - time_start <= t: if interupt(): break if (perf_counter() - time_start) >= dt: precision_sleep(dt) else: precision_sleep(perf_counter() - time_start)
if __name__ == '__main__': def test_psleep(t = 0.01): """ test_sleep t = 0.01 in seconds """ from time import time, sleep,perf_counter t1 = perf_counter() psleep(t) t2 = perf_counter() dt = t2-t1 print(dt) def test_intsleep(t = 0.1, dt = 0.1, interupt = False): """ test_sleep t = 0.01 in seconds """ from time import time, sleep,perf_counter print(t,dt,interupt) t1 = perf_counter() intsleep(t = t,dt = dt, interupt = interupt) t2 = perf_counter() dt = t2-t1 print(dt) def interupt(): """ return value of a global variable flag """ global flag return flag flag = True print('test_psleep(0.010) # in seconds') print('test_intsleep(0.10,0.01,interupt) # in seconds') print('intsleep(0.10,0.1) # in seconds')