X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/blobdiff_plain/a967b286845c5754d4fbfd1fab2cff6ff56be352..595c2cf96c6eb87f082de03a0fd21810d44f7d93:/unitproc/python/sleepRand.py?ds=inline diff --git a/unitproc/python/sleepRand.py b/unitproc/python/sleepRand.py index 7a9b2b7..016e9f3 100755 --- a/unitproc/python/sleepRand.py +++ b/unitproc/python/sleepRand.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # Desc: Pauses a random amount of time. Random distribution is inverse gaussian. -# Version: 0.0.5 +# Version: 0.0.6 # Depends: python 3.7.3 # Usage: ./sleepRand.py [-v] [-p P] SECONDS # Input: SECONDS: float seconds (mean of inverse gaussian distribution) @@ -34,6 +34,13 @@ parser.add_argument('--precision','-p', default=[4.0], type=float, help='How concentrated delays are around the mean (default: 4.0). Must be a positive integer or floating point value. Is the lambda factor in the inverse gaussian distribution. High values (e.g. > 10.0) cause random delays to rarely stray far from MEAN. Small values (e.g. < 0.10) result in many small delays plus occasional long delays.'); +parser.add_argument('--upper','-u', + action='store', + metavar='U', + nargs=1, + default=[None], + type=float, + help='Upper bound for possible delays (default: no bound). Without bound, extremely high delays are unlikely but possible.'); args = parser.parse_args(); # Define functions @@ -73,14 +80,28 @@ logging.debug('DEBUG:Debug logging output enabled.'); logging.debug('DEBUG:args.verbosity:' + str(args.verbosity)); logging.debug('DEBUG:args:' + str(args)); -## Reject negative floats. +## Receive input arguments try: ### Get desired mean desMean = args.mean[0]; logging.debug('DEBUG:Desired mean:' + str(desMean)); + ### Get lambda precision factor lambdaFactor = args.precision[0]; logging.debug('DEBUG:Lambda precision factor:' + str(lambdaFactor)); + + ### Get upper bound + if isinstance(args.upper[0], float): + logging.debug('DEBUG:args.upper[0] is float:' + str(args.upper[0])); + upperBound = args.upper[0]; + elif args.upper[0] is None: + logging.debug('DEBUG:args.upper[0] is None:' + str(args.upper[0])); + upperBound = None; + else: + raise TypeError('Upper bound not set correctly.'); + logging.debug('DEBUG:Upper bound:' + str(upperBound)); + + ### Reject negative floats. if desMean < 0: logging.error('ERROR:Desired mean is negative:' + str(desMean)); raise ValueError('Negative number error.'); @@ -91,8 +112,13 @@ except ValueError: sys.exit(1); # Calculate delay -delay = randInvGau(desMean, desMean * lambdaFactor); -logging.debug('delay:' + str(delay)); +rawDelay = randInvGau(desMean, desMean * lambdaFactor); +logging.debug('DEBUG:rawDelay(seconds):' + str(rawDelay)); +if isinstance(upperBound,float): + delay = min(upperBound, rawDelay); +elif upperBound is None: + delay = rawDelay; +logging.debug('DEBUG:delay(seconds) :' + str(delay)); # Sleep time.sleep(float(delay));