waitress-serve¶
Added in version 0.8.4: Waitress comes bundled with a thin command-line wrapper around the waitress.serve function called waitress-serve.
This is useful for development, and in production situations where serving of static assets is delegated to a reverse proxy, such as nginx or Apache.
waitress-serve takes the very same arguments as the
waitress.serve function, but where the function's arguments have
underscores, waitress-serve uses hyphens. Thus:
import myapp
waitress.serve(myapp.wsgifunc, port=8041, url_scheme='https')
Is equivalent to:
waitress-serve --port=8041 --url-scheme=https myapp:wsgifunc
The full argument list is given below.
Boolean arguments are represented by flags. If you wish to explicitly set a flag, simply use it by its name. Thus the flag:
--expose-tracebacks
Is equivalent to passing expose_tracebacks=True to waitress.serve.
All flags have a negative equivalent. These are prefixed with no-; thus
using the flag:
--no-expose-tracebacks
Is equivalent to passing expose_tracebacks=False to waitress.serve.
If at any time you want the full argument list, use the --help flag.
Applications are specified similarly to PasteDeploy, where the format is
myapp.mymodule:wsgifunc. As some application frameworks use application
objects, you can use dots to resolve attributes like so:
myapp.mymodule:appobj.wsgifunc.
A number of frameworks, web.py being an example, have factory methods on
their application objects that return usable WSGI functions when called. For
cases like these, waitress-serve has the --call flag. Thus:
waitress-serve --call myapp.mymodule.app.wsgi_factory
Would load the myapp.mymodule module, and call app.wsgi_factory to get
a WSGI application function to be passed to waitress.server.
Note
As of 0.8.6, the current directory is automatically included on
sys.path.
Invocation¶
Usage:
waitress-serve [OPTS] MODULE:OBJECT
Common options:
--helpShow this information.
--callCall the given object to get the WSGI application.
--host=ADDRHostname or IP address on which to listen, default is '0.0.0.0', which means "all IP addresses on this host".
--port=PORTTCP port on which to listen, default is '8080'
--listen=host:portTell waitress to listen on an ip port combination.
Example:
--listen=127.0.0.1:8080 --listen=[::1]:8080 --listen=*:8080
This option may be used multiple times to listen on multiple sockets. A wildcard for the hostname is also supported and will bind to both IPv4/IPv6 depending on whether they are enabled or disabled.
--[no-]ipv4Toggle on/off IPv4 support.
This affects wildcard matching when listening on a wildcard address/port combination.
--[no-]ipv6Toggle on/off IPv6 support.
This affects wildcard matching when listening on a wildcard address/port combination.
--unix-socket=PATHPath of Unix socket. If a socket path is specified, a Unix domain socket is made instead of the usual inet domain socket.
Not available on Windows.
--unix-socket-perms=PERMSOctal permissions to use for the Unix domain socket, default is '600'.
--url-scheme=STRDefault
wsgi.url_schemevalue, default is 'http'.--url-prefix=STRThe
SCRIPT_NAMEWSGI environment value. Setting this to anything except the empty string will cause the WSGISCRIPT_NAMEvalue to be the value passed minus any trailing slashes you add, and it will cause thePATH_INFOof any request which is prefixed with this value to be stripped of the prefix. Default is the empty string.--ident=STRServer identity used in the 'Server' header in responses. Default is 'waitress'.
Tuning options:
--threads=INTNumber of threads used to process application logic, default is 4.
--backlog=INTConnection backlog for the server. Default is 1024.
--recv-bytes=INTNumber of bytes to request when calling
socket.recv(). Default is 8192.--send-bytes=INTNumber of bytes to send to socket.send(). Default is 1. Multiples of 9000 should avoid partly-filled TCP packets.
Deprecated since version 1.3.
--outbuf-overflow=INTA temporary file should be created if the pending output is larger than this. Default is 1048576 (1MB).
--outbuf-high-watermark=INTThe app_iter will pause when pending output is larger than this value and will resume once enough data is written to the socket to fall below this threshold. Default is 16777216 (16MB).
--inbuf-overflow=INTA temporary file should be created if the pending input is larger than this. Default is 524288 (512KB).
--connection-limit=INTStop creating new channels if too many are already active. Default is 100.
--cleanup-interval=INTMinimum seconds between cleaning up inactive channels. Default is 30. See
--channel-timeout.--channel-timeout=INTMaximum number of seconds to leave inactive connections open. Default is 120. 'Inactive' is defined as 'has received no data from the client and has sent no data to the client'.
--[no-]log-socket-errorsToggle whether premature client disconnect tracebacks ought to be logged. On by default.
--max-request-header-size=INTMaximum size of all request headers combined. Default is 262144 (256KB).
--max-request-body-size=INTMaximum size of request body. Default is 1073741824 (1GB).
--[no-]expose-tracebacksToggle whether to expose tracebacks of unhandled exceptions to the client. Off by default.
--asyncore-loop-timeout=INTThe timeout value in seconds passed to
asyncore.loop(). Default is 1.--asyncore-use-pollThe use_poll argument passed to
asyncore.loop(). Helps overcome open file descriptors limit. Default is False.