diff --git a/scrapy/cmdline.py b/scrapy/cmdline.py index 35050c13d..cb7bbd64d 100644 --- a/scrapy/cmdline.py +++ b/scrapy/cmdline.py @@ -7,7 +7,6 @@ import pkg_resources import scrapy from scrapy.crawler import CrawlerProcess -from scrapy.xlib import lsprofcalltree from scrapy.commands import ScrapyCommand from scrapy.exceptions import UsageError from scrapy.utils.misc import walk_modules @@ -144,7 +143,7 @@ def execute(argv=None, settings=None): sys.exit(cmd.exitcode) def _run_command(cmd, args, opts): - if opts.profile or opts.lsprof: + if opts.profile: _run_command_profiled(cmd, args, opts) else: cmd.run(args, opts) @@ -152,17 +151,11 @@ def _run_command(cmd, args, opts): def _run_command_profiled(cmd, args, opts): if opts.profile: sys.stderr.write("scrapy: writing cProfile stats to %r\n" % opts.profile) - if opts.lsprof: - sys.stderr.write("scrapy: writing lsprof stats to %r\n" % opts.lsprof) loc = locals() p = cProfile.Profile() p.runctx('cmd.run(args, opts)', globals(), loc) if opts.profile: p.dump_stats(opts.profile) - k = lsprofcalltree.KCacheGrind(p) - if opts.lsprof: - with open(opts.lsprof, 'w') as f: - k.output(f) if __name__ == '__main__': execute() diff --git a/scrapy/commands/__init__.py b/scrapy/commands/__init__.py index 9ac013098..43b420821 100644 --- a/scrapy/commands/__init__.py +++ b/scrapy/commands/__init__.py @@ -65,8 +65,6 @@ class ScrapyCommand(object): help="disable logging completely") group.add_option("--profile", metavar="FILE", default=None, help="write python cProfile stats to FILE") - group.add_option("--lsprof", metavar="FILE", default=None, - help="write lsprof profiling stats to FILE") group.add_option("--pidfile", metavar="FILE", help="write process ID to FILE") group.add_option("-s", "--set", action="append", default=[], metavar="NAME=VALUE", diff --git a/scrapy/xlib/lsprofcalltree.py b/scrapy/xlib/lsprofcalltree.py deleted file mode 100644 index a604016cc..000000000 --- a/scrapy/xlib/lsprofcalltree.py +++ /dev/null @@ -1,120 +0,0 @@ -# lsprofcalltree.py: lsprof output which is readable by kcachegrind -# David Allouche -# Jp Calderone & Itamar Shtull-Trauring -# Johan Dahlin - -from __future__ import print_function -import optparse -import os -import sys - -try: - import cProfile -except ImportError: - raise SystemExit("This script requires cProfile from Python 2.5") - -def label(code): - if isinstance(code, str): - return ('~', 0, code) # built-in functions ('~' sorts at the end) - else: - return '%s %s:%d' % (code.co_name, - code.co_filename, - code.co_firstlineno) - -class KCacheGrind(object): - def __init__(self, profiler): - self.data = profiler.getstats() - self.out_file = None - - def output(self, out_file): - self.out_file = out_file - print('events: Ticks', file=out_file) - self._print_summary() - for entry in self.data: - self._entry(entry) - - def _print_summary(self): - max_cost = 0 - for entry in self.data: - totaltime = int(entry.totaltime * 1000) - max_cost = max(max_cost, totaltime) - print('summary: %d' % (max_cost,), file=self.out_file) - - def _entry(self, entry): - out_file = self.out_file - - code = entry.code - #print >> out_file, 'ob=%s' % (code.co_filename,) - if isinstance(code, str): - print('fi=~', file=out_file) - else: - print('fi=%s' % (code.co_filename,), file=out_file) - print('fn=%s' % (label(code),), file=out_file) - - inlinetime = int(entry.inlinetime * 1000) - if isinstance(code, str): - print('0 ', inlinetime, file=out_file) - else: - print('%d %d' % (code.co_firstlineno, inlinetime), file=out_file) - - # recursive calls are counted in entry.calls - if entry.calls: - calls = entry.calls - else: - calls = [] - - if isinstance(code, str): - lineno = 0 - else: - lineno = code.co_firstlineno - - for subentry in calls: - self._subentry(lineno, subentry) - print(file=out_file) - - def _subentry(self, lineno, subentry): - out_file = self.out_file - code = subentry.code - #print >> out_file, 'cob=%s' % (code.co_filename,) - print('cfn=%s' % (label(code),), file=out_file) - if isinstance(code, str): - print('cfi=~', file=out_file) - print('calls=%d 0' % (subentry.callcount,), file=out_file) - else: - print('cfi=%s' % (code.co_filename,), file=out_file) - print('calls=%d %d' % ( - subentry.callcount, code.co_firstlineno), file=out_file) - - totaltime = int(subentry.totaltime * 1000) - print('%d %d' % (lineno, totaltime), file=out_file) - -def main(args): - usage = "%s [-o output_file_path] scriptfile [arg] ..." - parser = optparse.OptionParser(usage=usage % sys.argv[0]) - parser.allow_interspersed_args = False - parser.add_option('-o', '--outfile', dest="outfile", - help="Save stats to ", default=None) - - if not sys.argv[1:]: - parser.print_usage() - sys.exit(2) - - options, args = parser.parse_args() - - if not options.outfile: - options.outfile = '%s.log' % os.path.basename(args[0]) - - sys.argv[:] = args - - prof = cProfile.Profile() - try: - try: - prof = prof.run('execfile(%r)' % (sys.argv[0],)) - except SystemExit: - pass - finally: - kg = KCacheGrind(prof) - kg.output(file(options.outfile, 'w')) - -if __name__ == '__main__': - sys.exit(main(sys.argv))