12 Commits

Author SHA1 Message Date
Pritam Baral
30554fdb4f InotifyReloader: Handle module.__file__ is None
0f527a01f4 added a fix for the case when some modules have the `__file__` attr set to `None`, for the polling reloader. Unfortunately, it missed making the same fix for the inotify reloader.

This change copies that fix into InotifyReloader
2018-09-17 11:24:17 -07:00
Justin Turner Arthur
d21310351f Optimize by precompiling regex and using tuple for iterable copies. 2018-06-17 09:51:48 +03:00
Edward Betts
0f527a01f4
Handle the case where module.__file__ is None.
Fixes #1058
2018-02-19 12:42:41 +00:00
Benno Rice
20616d50fc Move a default class definition into an else block so we're not redefining. 2017-07-12 16:26:04 +03:00
Peter VandeHaar
fc7c15abbd Only use inotify on linux (#1541)
Fixes #1540
2017-07-12 12:55:48 +03:00
Rok Garbas
f736909c5d
--reload-extra-file option 2017-06-15 00:46:47 +02:00
Mark Adams
bc20bea7d9 Add support for --reload-engine
Currently, gunicorn automatically uses the preferred reloader (inotify
if present with fallback to polling). However, it would be useful in
some scenarios if users could force polling.

The solution for this is to add a new configuration option called
'reload_engine' which takes one of three options: ['auto', 'poll',
'inotify'].

Fixes #1459
2017-02-14 19:49:37 +03:00
Mark Adams
92d48256e4 Modify 'reload' config to be more consistent with existing API
--reload = Runs the reloader with inotify if available and falls back on
           FS polling.
--reload=inotify = Forces the reloader to run with inotify
--reload=poll = Forces the reloader to use FS polling
2016-10-24 11:39:10 -05:00
Mark Adams
64b26ef766 Fix #1368 by adding InotifyReloader and 'use-inotify' configuration option
Currently, '--reload' uses FS polling to find out when files have
changed. For some time, the Linux kernel has had a feature called
inotify that allows applications to monitor for FS events without
polling.

This commit adds a new 'use-inotify' configuration option that will
cause gunicorn to use the new 'InotifyReloader' instead of the default
'Reloader' when 'reload' is enabled.

Using inotify can result in lower CPU consumption by gunicorn especially
when working with virtualized filesystems or environments with a large
number of watched files / directories.
2016-10-17 21:21:37 -05:00
Berker Peksag
da5e847b63 Fix RuntimeError in gunicorn.reloader.
Here's the reproducer in Python 3.3:

    $ gunicorn --paste paste.ini --reload

Then I got the following exception:

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/local/lib/python3.3/threading.py", line 901, in _bootstrap_inner
    self.run()
  File "/home/berker/hacking/mediagoblin/venv3/lib/python3.3/site-packages/gunicorn/reloader.py", line 41, in run
    for filename in self.get_files():
  File "/home/berker/hacking/mediagoblin/venv3/lib/python3.3/site-packages/gunicorn/reloader.py", line 29, in get_files
    for module in sys.modules.values()
  File "/home/berker/hacking/mediagoblin/venv3/lib/python3.3/site-packages/gunicorn/reloader.py", line 28, in <listcomp>
    re.sub('py[co]$', 'py', module.__file__)
RuntimeError: dictionary changed size during iteration
2014-06-28 07:03:31 +03:00
Yue Du
cb817dfa98 Remove unused imports 2014-05-14 14:08:18 +08:00
Randall Leeds
e106bf82a8 Add --reload option for code reloading
Fix #526
2014-01-15 19:08:34 -08:00