classification
Title: IDLE: Reduce number and time for user process imports
Type: enhancement Stage: needs patch
Components: IDLE Versions: Python 3.7, Python 3.6
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: terry.reedy Nosy List: cheryl.sabella, terry.reedy
Priority: normal Keywords: patch

Created on 2016-07-16 23:19 by terry.reedy, last changed 2017-06-08 22:11 by cheryl.sabella.

Files
File name Uploaded Description Edit
run_autocomplete.diff terry.reedy, 2016-07-16 23:19 review
Pull Requests
URL Status Linked Edit
PR 2011 open cheryl.sabella, 2017-06-08 19:20
Messages (4)
msg270592 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2016-07-16 23:19
This issue continues #25507.  I still want to reduce the number of modules imported when run.py starts a user process and the time they require.  In the process, I expect to reduce the number of tkinter module imports that need to be reversed and thereby make parts of the #25507 fix unnecessary.

"New changeset 93d325c64104 by Terry Jan Reedy in branch 'default':
Issue #25507: Move 4 objects from pyshell to run and switch inports.
https://hg.python.org/cpython/rev/93d325c64104"

This commit for #25507 was not needed for the fix I eventually choose, but it reduced the size of sys.modules in the user process from 193 to 156.  I have since determined that it reduced the time for startup imports on my machine from .45 to .25 seconds.  I now regard it as the first patch for this issue.

The attached file was explained in msg270522.  This and similar refactorings should be done when or after I have otherwise revised the module and tests in question.

For a Windows build of repository 3.6, importing tkinter into a fresh python process increases len(sys.modules) from 41 to 65.  But run only imports tkinter so it can call _tkinter.tkapp().eval('update') in its interactive input loop.  If other indirect imports were eliminated, I suspect _tkinter could be imported instead.
msg295460 - (view) Author: Cheryl Sabella (cheryl.sabella) * (Python committer) Date: 2017-06-08 19:19
Terry,

I've applied this patch to 3.7 and made a pull request.  This seemed like a fix you wanted to move forward with, so I hope that's helpful.
msg295470 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2017-06-08 21:45
Yes, I do want to continue this.  As I explained in msg270522, I shelved (but not abandoned) the autocomplete patch because it caused a test failure I did not (and do not) understand, and because I found another fix for that issue.  The reductions I noted above were for the patch I did apply, not this one.

Update: I just created pr_2011 and test_idle passes.  I'm puzzled. I don't remember patching autocomplete since last July.  Anyway, if the patch works, I can now decide if I really want to go this route.  It makes sense to keep related functions together.  It also makes sense to keep functions that run in the same process together.  I should see if this patch has any noticeable benefit (time and import reduction) and if a similar patch for call tips works and has benefit.
msg295471 - (view) Author: Cheryl Sabella (cheryl.sabella) * (Python committer) Date: 2017-06-08 22:11
Yes, I ran test_idle before I submitted the pull request.  I wasn't sure if I was missing something based on your comments of the test failing.
History
Date User Action Args
2017-07-09 02:26:03terry.reedylinkissue8231 dependencies
2017-06-08 22:11:34cheryl.sabellasetmessages: + msg295471
2017-06-08 21:45:38terry.reedysetmessages: + msg295470
versions: + Python 3.7
2017-06-08 19:20:05cheryl.sabellasetpull_requests: + pull_request2077
2017-06-08 19:19:13cheryl.sabellasetnosy: + cheryl.sabella
messages: + msg295460
2016-07-25 00:08:07terry.reedylinkissue27609 dependencies
2016-07-16 23:19:16terry.reedycreate