On Wed, Jan 16, 2013 at 8:06 AM, Jean-Baptiste Quenot <[email protected]> wrote:
> You're very right, new files were not detected.
>
> I updated my code accordingly, and also gave a grace time of 200ms before
> actually reloading.
>
> See https://gist.github.com/4546993
>
> Thanks for the great community support!
>
>
> 2013/1/16 Ævar Arnfjörð Bjarmason <[email protected]>
>>
>> On Wed, Jan 16, 2013 at 11:26 AM, Jean-Baptiste Quenot <[email protected]>
>> wrote:
>> > OK, I didn't know about the "attach-daemon" option.
>>
>> Me neither. Looks like something I can use for inotify-hookable too.
>>
>> > Here is the python reload script I finally came up with:
>> >
>> > #! /usr/bin/python
>> >
>> > import pyinotify, sys, os, signal
>> >
>> > def callback(evt):
>> >     print "Change detected!", evt
>> >     os.kill(os.getppid(), signal.SIGHUP)
>> >     sys.exit(0)
>> >
>> > wm = pyinotify.WatchManager()
>> > notifier = pyinotify.Notifier(wm, default_proc_fun=callback)
>> > root = sys.argv[1]
>> > for parentdir, dirs, files in os.walk(root):
>> >     for file in files:
>> >         if file.endswith(".tmpl") or file.endswith(".py"):
>> >             wm.add_watch(os.path.join(parentdir, file),
>> > pyinotify.ALL_EVENTS)
>> > notifier.loop()
>> >
>> > And the uwsgi config:
>> >
>> > {
>> >     "uwsgi": {
>> >         "attach-daemon": "uwsgi-watch-wc /path/to/my/app",
>> >         "module": "server:application",
>> >         "pythonpath": ["/path/to/my/app"],
>> >         "uid": "www-data",
>> >         "gid": "www-data"
>> >     }
>> > }
>> >
>> > Thanks to all for your useful contributions!
>>
>> I've only read the code for this and not actually tried it, but
>> there's a few major caveats with it that my inotify-hookable deals
>> with:
>>
>>  * You're only watching existing files, you need to be adding watches
>>    on directories in case someone adds a file.
>>
>>  * You're going to restart as soon as you get one inotify event,
>>    that's very wasteful and usually not what you want.
>>
>>    When someone e.g. does a "git pull" you'll restart right away when
>>    1/100 files has been changed, and might possibly be back up before
>>    all the files are changed, and before you can re-setup the watch.
>>
>>    inotify-hookable deals with this by waiting X ms when it gets a
>>    inotify hit waiting for more events, as long as it keeps getting
>>    events it'll extend the wait a bit more before finally running
>>    hooks.
>> _______________________________________________
>> uWSGI mailing list
>> [email protected]
>> http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi
>
>
>
>
> --
> Jean-Baptiste Quenot

I've been looking for a Python 3 + uWSGI (especially uwsgi) way to do
what https://crate.io/packages/ReloadWSGI does. Its feature is that
the old version of the app continues to run until the new version
loads correctly, so if you happen to save a syntax error the already
running, working app keeps going until your application becomes
loadable. Unfortunately the package requires Paste and only works on
Python 2, and does not use uWSGI. Is there an easy way to do that with
uWSGI yet?

Thanks,

Daniel Holth
_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi

Reply via email to