GitHub - jonashaag/bjoern: A screamingly fast Python 2/3 WSGI server written in C. (original) (raw)

bjoern: Fast And Ultra-Lightweight HTTP/1.1 WSGI Server

Join the chat at https://gitter.im/jonashaag/bjoern

A screamingly fast, ultra-lightweight WSGI server for CPython 2 and CPython 3, written in C using Marc Lehmann's high performance libev event loop and Ryan Dahl's http-parser.

Why It's Cool

bjoern is the fastest, smallest and most lightweight WSGI server out there, featuring

Installation

pip install bjoern. See wiki for details.

Usage

Flask example

from flask import Flask

app = Flask(name)

@app.route("/") def hello_world(): return "Hello, World!"

if name == "main": import bjoern

bjoern.run(app, "127.0.0.1", 8000)

Advanced usage

Bind to TCP host/port pair:

bjoern.run(wsgi_application, host, port)

TCP host/port pair, enabling SO_REUSEPORT if available.

bjoern.run(wsgi_application, host, port, reuse_port=True)

Bind to Unix socket:

bjoern.run(wsgi_application, 'unix:/path/to/socket')

Bind to abstract Unix socket: (Linux only)

bjoern.run(wsgi_application, 'unix:@socket_name')

Enable statsd metrics. See instrumentation.md for details.

bjoern.run(wsgi_application, host, port, statsd=...)

Alternatively, the mainloop can be run separately:

bjoern.listen(wsgi_application, host, port) bjoern.run()

With metrics. See instrumentation.md for details.

bjoern.listen(wsgi_application, host, port) bjoern.run(statsd=...)

You can also simply pass a Python socket(-like) object. Note that you are responsible for initializing and cleaning up the socket in that case.

bjoern.server_run(socket_object, wsgi_application) bjoern.server_run(filedescriptor_as_integer, wsgi_application)

This needs manual compilation with WANT_STATSD=yes

bjoern.server_run(socket_object, wsgi_application, enable_statsd=True)