[Web-SIG] daemon tools
Jim Fulton
jim at zope.com
Mon Mar 5 12:28:15 CET 2007
On Mar 3, 2007, at 6:19 PM, Robert Brewer wrote:
> Jim Fulton wrote:
> > For some time, Zope has used a daemon-management tool
> > we wrote called zdaemon:
> >
> > http://www.python.org/pypi/zdaemon
> >
> > Ironically, this sort of tool isn't Python specific at all,
> > and the discussion highlighted some non-Python tools, notably
> > daemontools and runit, neither of which seemed as appealing
> > as zdaemon for various reasons.
>
> The user interface isn't Python-specific, but the interaction with
> WSGI servers, middleware, applications, and frameworks should be.
I don't think we are talking about the same thing. See my comment at
the end of this note.
> Components at all levels of the WSGI stack need to interact with
> "site-wide" events and settings. What I'm envisioning (and writing
> for CP at the moment) is a framework-neutral, one-per-site Engine
> object that is basically a publish/subscribe messenger; when you
> import a Python web framework, it registers listeners for process
> start, stop, and graceful restart. These would be things that need
> to happen regardless of the OS process invoker: whether a common
> 'webctl' script (that we author), or a framework-specific function
> (like cherrypy.quickstart), or Apache (via mod_python).
I encourage you to look at the zope event system which already
supports this use case:
http://www.python.org/pypi/zope.event
http://www.python.org/pypi/zope.component#handlers
> The pub/sub model also supports plugins with their own channel(s).
> For example, frameworks would blindly call engine.publish
> ('autoreload.add', filename) as desired. If the invoker (webctl,
> quickstart, or Apache) plugs in an autoreloader, great; it
> subscribes to that channel, receives each message, and adds each
> filename to its list of files to monitor. If no autoreloader has
> been plugged in, the 'add' message is correctly ignored. And when
> the autoreloader detects a change, it would also publish 'reload'
> or 'reexec' messages, which would then be subscribed to by a Reexec
> plugin. Most of the plugins would be provided by the invoker, but
> frameworks would be free to use the Engine to register their own
> events and event listeners.
>
> This interface between a site-wide container and the WSGI
> components is far more important to me than the actual details of
> invocation (like forking, signal-handling, logging, etc). The
> latter can be written as Engine plugins, and can compete in a
> market created by a good "Web Site Engine Interface" spec.
I think you're "sitewide container" is the main program that loads
the WSGI components. This might be Apache, if mod_python is used, or
some Python script/program. I was discussing a tool that managed the
main program in the later case. Something that started and restarted
it, provided status information, helped it to run as a proper daemon
and so on.
Jim
--
Jim Fulton mailto:jim at zope.com Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
More information about the Web-SIG
mailing list