From: fgallina@gnu.org (Fabián Ezequiel Gallina)
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: 16875@debbugs.gnu.org
Subject: bug#16875: python, comint-mode: Large output makes Emacs freeze
Date: Sun, 20 Jul 2014 19:27:46 -0300 [thread overview]
Message-ID: <87tx6bhdi5.fsf@gnu.org> (raw)
In-Reply-To: <jwvlhslt6op.fsf-monnier+emacsbugs@gnu.org> (Stefan Monnier's message of "Wed, 25 Jun 2014 10:26:30 -0400")
Andreas Röhler <andreas.roehler@easy-emacs.de> writes:
>> Indeed, "pprint" should solve it already. Maybe make that the default?
>> IMO looks better anyway.
That's changing the Python shell default behavior and I that's out of
the scope of python.el.
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>>> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13675
>> To a certain extend.
>> There some more operations done by comint, which aren't needed when
>> executing Python code from source but may slow down it.
>
> I expect the main slowdown comes from font-lock. But indeed, it''d be
> good to try and profile it to see where the time is spent.
>
From profiling, a lot of time spent on font-locking while another bunch
is spent at `comint-postoutput-scroll-to-bottom' (default member of
`comint-output-filter-functions').
After disabling both, the output is sent pretty quickly and Emacs, while
it's a bit slower, it's still responsive.
WRT the font-lock slowness I must say I'm not happy the way it's
implemented, there should be a better way to just fontify the text after
the current prompt. That should avoid any extreme fontification cases.
>
> If the problem is really in "unneeded comint functionality" (or call it
> "bloat"), that's an option, but of course if we don't know where the
> performance problem comes, we may end up with the same problem anyway.
>
Now about the `comint-postoutput-scroll-to-bottom', this alone can also
make Emacs be extremely irresponsive (pretty much like with the
font-locking enabled). The real culprit of it's slowness is `recenter'
function which seems to get really slow with long lines. Here are the
elp-results with font-lock disabled (with a smaller sample of output):
comint-output-filter 103 29.795948749 0.2892810558
comint-postoutput-scroll-to-bottom 104 28.636891969 0.2753547304
recenter 104 28.635311547 0.2753395341
python-pdbtrack-comint-output-filter-function 104 0.990129131 0.0095204724
comint-watch-for-password-prompt 104 0.0924025480 0.0008884860
> Maybe comint.el could also be changed so that it "wraps" lines if they
> get past some arbitrary maximum length (like 10K chars, for example).
> It wouldn't be a great solution, but if the performance sucks really bad
> past 10K chars, wrapping the line might be a lesser evil.
>
Disabling font-lock and avoiding the `recenter' calls works pretty well,
so I rather focus on improving those than modifying comint to workaround
this.
As a final related note, to avoid unnecessary filters, I think the
`inferior-python-mode' should set the `comint-output-filter-functions'
to a minimum and point users to append custom desired filters using the
`inferior-python-mode-hook'.
Regards,
Fabián
next prev parent reply other threads:[~2014-07-20 22:27 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-25 9:21 bug#16875: python, comint-mode: Large output makes Emacs freeze Andreas Röhler
2014-06-25 1:19 ` Fabián Ezequiel Gallina
2014-06-25 5:27 ` Andreas Röhler
2014-06-25 14:26 ` Stefan Monnier
2014-06-25 15:28 ` Andreas Röhler
2014-07-20 22:27 ` Fabián Ezequiel Gallina [this message]
2014-07-23 6:20 ` Andreas Röhler
2014-07-27 2:22 ` Fabián Ezequiel Gallina
2014-07-27 4:03 ` Eli Zaretskii
2014-07-28 21:35 ` Fabián Ezequiel Gallina
2014-07-29 7:32 ` Eli Zaretskii
2014-07-27 10:20 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87tx6bhdi5.fsf@gnu.org \
--to=fgallina@gnu.org \
--cc=16875@debbugs.gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).