Changes between Version 1 and Version 2 of SummerOfCode2017

01/27/2017 09:28:19 AM (3 years ago)
Aymeric Augustin



  • SummerOfCode2017

    v1 v2  
    151151While it is *possible* to work around this problem, it *should* be a well documented, easy to use capability.
     153=== Improved autoreloader (#27685) ===
     154* '''Complexity:''' Medium
     156Django's development server includes an auto-reloader. Its design is quite old. It keeps a list of imported Python files (as well as .mo files, there's a hardcoded special case), checks every second the mtime of these files, and triggers a reload if a file was updated. This cannot be good for battery life.
     158A more efficient implementation based on inotify is available on Linux. An implementation based on kqueue was developed at some point but quickly removed because of kqueue limitations (#21621).
     160Several open-source projects provide modern and robust building blocks for building the autoreload feature. The most mature in general is probably watchman. The most mature Python library is probably watchdog. However their APIs are quite low level and there's no trivial way to integrate them with Django's development server.
     162The first goal of this project is to figure out and implement this integration. This means rebuilding the development server's autoreloading feature, perhaps with a slightly different behavior and hopefully with better performance, while preserving the main APIs (`runserver`, `runserver --no-reload`).
     164It would make sense to switch from watching all imported Python files to watching the current directory. Modifying non-Python files whose content is somehow cached in the Python process happens and is regularly reported as a bug, while modifying files in `$VIRTUAL_ENV/lib/pythonX.Y/site-packages` is an uncommon case.
     166It will be a good opportunity to fix various bugs of the autoreloader such as the inability to detect the addition of a file, typically an ``.
     168The second goal is to improve configurability of the autoreloader, perhaps by exposing the underlying library's configuration knobs. This will allow people to customize the behavior according to their needs, for example if they want to go back to the previous behavior and watch `$VIRTUAL_ENV`.
Back to Top