Provided by: chaussette_1.3.0+git20170419+82ac44a-0.4_all bug


       chaussette - Chaussette Documentation [image]

       Chaussette is a WSGI server you can use to run your Python WSGI applications.

       The  particularity  of  Chaussette  is that it can either bind a socket on a port like any
       other server does or run against already opened sockets.

       That makes Chaussette the best companion to run a WSGI or Django stack under a process and
       socket manager, such as Circus or Supervisor.  Build StatusCoverage Status on master

       You  can  run  a plain WSGI application, a Django application, or a Paste application.  To
       get all options, just run chaussette --help.


       Chaussette provides a console script you can launch against a WSGI application,  like  any
       WSGI server out there:

          $ chaussette mypackage.myapp
          Application is <function myapp at 0x104d97668>
          Serving on localhost:8080
          Using <class chaussette.backend._wsgiref.ChaussetteServer at 0x104e58d50> as a backend


       Chaussette  allows you to run a Django project. You just need to provide the Python import
       path of the WSGI application, commonly located in the Django project's  file.  For
       further  information  about  how  the  file  should  look  like  see  the  Django

       Here's an example:

          $ chaussette --backend gevent mysite.wsgi.application
          Application is <django.core.handlers.wsgi.WSGIHandler object at 0x10ec3f350>
          Serving on localhost:8080
          Using <class 'chaussette.backend._gevent.Server'> as a backend


       Chaussette will let you run a project based on a Python Paste configuration file.

       You just need to use to provide the path to the configuration  file  in  the  application,
       prefixed with paste:

       Here's an example:

          $ chaussette paste:path/to/configuration.ini
          $ Application is <mozsvc.middlewares.CatchErrorMiddleware object at 0x10d4fdad0>
          $ Serving on localhost:8080
          $ Using <class chaussette.backend._wsgiref.ChaussetteServer at 0x10cc7e668> as a backend

       The  typical  use  case is to run Chaussette processes under a process and socket manager.
       Chaussette was developed to run under Circus, which takes care of binding the  socket  and
       spawning Chaussette processes.

       To  run  your WSGI application using Circus, define a socket section in your configuration
       file, then add a Chaussette watcher.

       Minimal example:

          endpoint = tcp://
          pubsub_endpoint = tcp://
          stats_endpoint = tcp://

          cmd = chaussette --fd $(circus.sockets.web) --backend meinheld
          use_sockets = True
          numprocesses = 5

          host =
          port = 8000

       When Circus runs, it binds a socket on the 8000 port and passes the file descriptor  value
       to the Chaussette process, by replacing ${socket:web} by the file number value.

       Supervisor  includes  a  socket  manager  since  version  3.0a7, released in 2009.  It was
       originally developed to support FastCGI processes and thus the  configuration  section  is
       called  fcgi-program.   Despite  the  name,  it  is  not  tied  to  the  FastCGI protocol.
       Supervisor can bind the socket and then spawn Chaussette processes.

       To run your WSGI application using Supervisor, define  an  fcgi-program  section  in  your
       configuration file.

       Minimal example:

          logfile = /tmp/supervisord.log

          port =

          serverurl =

          supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

          command = chaussette --fd 0 --backend meinheld
          process_name = %(program_name)s_%(process_num)s
          numprocs = 5
          socket = tcp://

       Notice  the  --fd  0  argument  to  chaussette.  Each fcgi-program section defines its own
       socket and the file descriptor is always  0.   See  the  Supervisor  manual  for  detailed

       Supervisor  will  create  the  socket  before spawning the first Chaussette child process.
       When the last child exits, Supervisor will close the socket.

       Chaussette is just a bit of glue code  on  the  top  of  existing  WSGI  servers,  and  is
       organized around back ends.

       By  default  Chaussette  uses  a  pure Python implementation based on wsgiref, but it also
       provides more efficient back ends. Most of them are for Python 2 only, but Chaussette  can
       be used under Python 3 with a few of them - marked in the list below:

       • gevent -- based on Gevent's pywsgi server

       • fastgevent -- based on Gevent's wsgi server -- faster but does not support streaming.

       • meinheld -- based on Meinheld's fast C server

       • waitress -- based on Pyramid's waitress pure Python web server (py3)

       • eventlet -- based on Eventlet's wsgi server

       • geventwebsocket -- Gevent's pywsgi server coupled with geventwebsocket handler.

       • geventws4py -- Gevent's pywsgi server coupled with ws4py handler.

       • socketio  --  based  on  gevent-socketio, which is a custom Gevent server & handler that
         manages the socketio protocol.

       • bjoern -- based on Bjoern.

       • tornado -- based on Tornado's wsgi server.

       You can select your backend by using the --backend option and providing its name.

       For some backends, you need to make sure the corresponding libraries are installed:

       • gevent and fastgevent: pip install geventmeinheld : pip install meinheldwaitress : pip install waitresseventlet : pip install eventletgeventwebsocket: pip install gevent-websocketgeventws4py: pip install ws4pysocketio: pip install gevent-socketiobjoern: pip install bjoerntornado: pip install tornado

       If you want to add your favorite WSGI Server as a backend to Chaussette, or if  you  think
       you can make one of the backend Python 3 compatible, send me an e-mail !

       If you curious about how each on of those backends performs, you can read:


       Most WGSI servers out there provide advanced features to scale your web applications, like
       multi-threading or multi-processing. Depending on  the  project,  the  process  management
       features,  like  respawning  processes  that  die,  or adding new ones on the fly, are not
       always very advanced.

       On the other hand, tools like Circus and Supervisor have more advanced features to  manage
       your processes, and are able to manage sockets as well.

       The  goal of Chaussette is to delegate process and socket management to its parent process
       and just focus on serving requests.

       Using a pre-fork model, the process manager binds a  socket.   It  then  forks  Chaussette
       child processes that accept connections on that socket.

       For more information about this design, read :



       • Repository :

       • Documentation :

       • Continuous Integration:


       Tarek Ziade


       2021, Tarek Ziade