code: def profileit(path=None):
      
  
      def inner(func):
          @wraps(func)
          def wrapper(*args, **kwargs):
              prof = cProfile.Profile()
              retval = prof.runcall(func, *args, **kwargs)
              if path is not None:
                  print prof.print_stats()
                  prof.dump_stats(os.path.expanduser(path))
              else:
                  print prof.print_stats()
              return retval
          return wrapper
      return inner
docs: cProfile decorator to profile a function
  
      :param path: output file path
      :type path: str
      :return: Function