Mercurial > piecrust2
view piecrust/serving/wrappers.py @ 414:c4b3a7fd2f87
bake: Make pipeline processing multi-process.
Not many changes here, as it's pretty straightforward, but an API change for
processors so they know if they're being initialized/disposed from the main
process or from one of the workers. This makes it possible to do global stuff
that has side-effects (e.g. create a directory) vs. doing in-memory stuff.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 20 Jun 2015 19:20:30 -0700 |
parents | fa3ee8a8ee2d |
children | 9612cfc6455a |
line wrap: on
line source
import os from piecrust.serving.server import Server from piecrust.serving.procloop import _sse_abort def run_werkzeug_server(root_dir, host, port, debug_piecrust=False, sub_cache_dir=None, use_debugger=False, use_reloader=False): from werkzeug.serving import run_simple def _run_sse_check(): # We don't want to run the processing loop here if this isn't # the actual process that does the serving. In most cases it is, # but if we're using Werkzeug's reloader, then it won't be the # first time we get there... it will only be the correct process # the second time, when the reloading process is spawned, with the # `WERKZEUG_RUN_MAIN` variable set. return (not use_reloader or os.environ.get('WERKZEUG_RUN_MAIN') == 'true') app = _get_piecrust_server(root_dir, debug=debug_piecrust, sub_cache_dir=sub_cache_dir, run_sse_check=_run_sse_check) try: run_simple(host, port, app, threaded=True, use_debugger=use_debugger, use_reloader=use_reloader) finally: _sse_abort.set() def run_gunicorn_server(root_dir, debug_piecrust=False, sub_cache_dir=None, gunicorn_options=None): from gunicorn.app.base import BaseApplication class PieCrustGunicornApplication(BaseApplication): def __init__(self, app, options): self.app = app self.options = options super(PieCrustGunicornApplication, self).__init__() def load_config(self): for k, v in self.options.items(): if k in self.cfg.settings and v is not None: self.cfg.set(k, v) def load(self): return self.app app = _get_piecrust_server(root_dir, debug=debug_piecrust, sub_cache_dir=sub_cache_dir) gunicorn_options = gunicorn_options or {} app_wrapper = PieCrustGunicornApplication(app, gunicorn_options) app_wrapper.run() def _get_piecrust_server(root_dir, **kwargs): server = Server(root_dir, **kwargs) app = server.getWsgiApp() return app