diff --git a/amodem/profiling.py b/amodem/profiling.py new file mode 100644 index 0000000..75458ad --- /dev/null +++ b/amodem/profiling.py @@ -0,0 +1,14 @@ +import cProfile +import contextlib + + +@contextlib.contextmanager +def save(filename=None): + if filename: + pr = cProfile.Profile() + pr.enable() + yield + pr.disable() + pr.dump_stats(filename) + else: + yield diff --git a/amodem/recv.py b/amodem/recv.py index 77d9a8a..b13be0f 100755 --- a/amodem/recv.py +++ b/amodem/recv.py @@ -18,6 +18,7 @@ from . import train from . import common from . import config from . import ecc +from . import profiling modem = sigproc.MODEM(config) @@ -290,9 +291,11 @@ if __name__ == '__main__': default=sys.stdin) p.add_argument('-o', '--output', type=argparse.FileType('wb'), default=sys.stdout) + p.add_argument('-p', '--profile', type=str) args = p.parse_args() try: - main(args) + with profiling.save(filename=args.profile): + main(args) except Exception as e: log.exception(e) finally: diff --git a/scripts/profile.sh b/scripts/profile.sh deleted file mode 100755 index ff2b97b..0000000 --- a/scripts/profile.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -python -m cProfile -o result.prof $* - -echo "sort time -stats 20" | python -m pstats result.prof 1>&2