Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#31599 closed Cleanup/optimization (wontfix)

Improve the performance of the autoreloader by ignoring third party packages.

Reported by: Tom Forbes Owned by: nobody
Component: Utilities Version: dev
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

In https://github.com/django/django/pull/12750 and https://code.djangoproject.com/ticket/30372 we stopped watching the translation files that Django ships, to improve the performance of the autoreloader.

I believe we can go a step further and stop monitoring all third-party packages for changes by using the sysconfig module: https://docs.python.org/3/library/sysconfig.html. With this we can get a list of different Python system directories, for example:

	data = "/Users/tom/PycharmProjects/github/orf/django/venv"
	include = "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/include/python3.7m"
	platinclude = "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/include/python3.7m"
	platlib = "/Users/tom/PycharmProjects/github/orf/django/venv/lib/python3.7/site-packages"
	platstdlib = "/Users/tom/PycharmProjects/github/orf/django/venv/lib/python3.7"
	purelib = "/Users/tom/PycharmProjects/github/orf/django/venv/lib/python3.7/site-packages"
	scripts = "/Users/tom/PycharmProjects/github/orf/django/venv/bin"
	stdlib = "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7"

We could simply not watch any path under the purelib directory to start. This would exclude a huge number of files from being watched - Django alone has 824 individual files that would be excluded, and it's safe to assume that a large project with many third party dependencies would have several thousand.

This would be a breaking change - personally I sometimes find myself navigating into third party code and making small changes while debugging, and I'm sure others do this from time to time. However I don't think it's a common occurance for most developers and I'm not sure everyone paying a cost is worth the benefit to a small number of people.

Change History (3)

comment:1 by Mariusz Felisiak, 4 years ago

Resolution: wontfix
Status: newclosed
Summary: Improve the performance of the autoreloader by ignoring third party packagesImprove the performance of the autoreloader by ignoring third party packages.

IMO we should still trace changes in 3rd-party packages. It's not only about making local changes for debugging (I do the same) but also about changing versions of 3rd-party packages. In such cases, forcing users to manually restart the server can be annoying.

This kind of changes should be preceded by discussion and a strong consensus on DevelopersMailingList. Thanks.

comment:2 by Adam Johnson, 4 years ago

Instead of not watching third party files at all, we could check them much less frequently. For example StatReloader tries to stat every file every second - it could instead use a lower frequency for third party files, maybe adapting to high frequency temporarily if it spots any changes indicating debugging (and maybe even move to a higher frequency for project files). I'm not sure how it could be extended to WatchmanReloader - perhaps only files that are expected to be changed are checked through watchman, the rest on a low-frequency state.

comment:3 by Adam Johnson, 4 years ago

Anyway, yes a mailing list discussion would be nice, could draw out some alternative approaches.

Note: See TracTickets for help on using tickets.
Back to Top