David Blume's GitList
Repositories
testpython.git
Code
Commits
Branches
Tags
Search
Tree:
31df010
Branches
Tags
main
python2
testpython.git
testpython.py
Add a profile decorator.
David Blume
commited
31df010
at 2021-01-09 17:52:58
testpython.py
Blame
History
Raw
#!/usr/bin/env python3 # "Hello Friends" in Chinese: 朋友你好 import os import sys import time import functools from argparse import ArgumentParser import counter.counter import sitesize.sitesize from typing import Optional, Callable from decorators import timeit, profile v_print:Callable def set_v_print(verbose: bool) -> None: """ Defines the function v_print. It prints if verbose is true, otherwise, it does nothing. See: http://stackoverflow.com/questions/5980042 :param verbose: A bool to determine if v_print will print its args. """ global v_print v_print = print if verbose else lambda *a, **k: None class Coffee: def __init__(self, price: float): self._price = price @property def price(self) -> float: return self._price @price.setter def price(self, new_price: float) -> None: if new_price > 0 and isinstance(new_price, float): self._price = new_price else: raise ValueError("price must be a non-negative float.") @timeit.timeit @profile.profile # may invoke with parameters, too def main(debug: bool) -> None: script_dir = os.path.abspath(os.path.dirname(sys.argv[0])) print(f'{sys.argv[0]} is in {script_dir}.') # Raymond Hettinger's example use of queue.Queue and threading.Thread v_print("Running counter...") counter.counter.run() # Raymond Hettinger's example use of multiprocessing.pool's ThreadPool v_print("Running sitesize...") sitesize.sitesize.run() cuppa = Coffee(5.00) cuppa.price = cuppa.price - 1.00 if __name__ == '__main__': parser = ArgumentParser(description='Just a template sample.') parser.add_argument('-d', '--debug', action='store_true') parser.add_argument('-v', '--verbose', action='store_true') args = parser.parse_args() set_v_print(args.verbose) main(args.debug)