meinheld 0,0,0,1 travis-ci python

meinheld is a high performance asynchronous WSGI Web Server (based on picoev)

What's this

.. image:: https://travis-ci.org/mopemope/meinheld.png :target: https://travis-ci.org/mopemope/meinheld

This is a high performance python wsgi web server.

Thus this is yet an another asynchronous web server like gevent.

And meinheld is a WSGI compliant web server. (PEP333 and PEP3333 supported)

You can also join us in meinheld mailing list and #meinheld on freenode_

Requirements

meinheld requires Python 2.x >= 2.6 or Python 3.x >= 3.2 . and greenlet >= 0.4.5.

meinheld supports Linux, FreeBSD, Mac OS X.

Installation

Install from pypi::

$ pip install -U meinheld

Install from source::

$ python setup.py install

meinheld supports gunicorn.

To install gunicorn::

$ pip install -U gunicorn

Basic Usage

simple wsgi app:

.. code:: python

from meinheld import server

def hello_world(environ, start_response):
    status = b'200 OK'
    res = b"Hello world!"
    response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(res)))]
    start_response(status, response_headers)
    return [res]

server.listen(("0.0.0.0", 8000))
server.run(hello_world)

with gunicorn. user worker class "egg:meinheld#gunicorn_worker" or "meinheld.gmeinheld.MeinheldWorker"::

$ gunicorn --workers=2 --worker-class="egg:meinheld#gunicorn_worker" gunicorn_test:app

Continuation

meinheld provides a simple continuation API (based on greenlet).

To enable continuations, use ContinuationMiddleware. get Continuation from wsgi environ.

Continuation objects have two very interesting methods, suspend and resume.

For example:

.. code:: python

from meinheld import server
from meinheld import middleware

def app(environ, start_response):
    ...

    #get Continuation
    c = environ.get(middleware.CONTINUATION_KEY, None)

    ...

    if condtion:
        waiters.append(c)
        #suspend 
        c.suspend()
    else:
        for c in waiters:
            # resume suspend function
            c.resume()

    ...

server.listen(("0.0.0.0", 8000))
server.run(middleware.ContinuationMiddleware(hello_world))

For more info see http://github.com/mopemope/meinheld/tree/master/example/chat/

Websocket

meinheld support Websockets. use WebSocketMiddleware.

For example:

.. code:: python

from flask import Flask, render_template, request
from meinheld import server, middleware

SECRET_KEY = 'development key'
DEBUG=True

app = Flask(__name__)
app.config.from_object(__name__)

participants = set()

@app.route('/')
def index():
    return render_template('websocket_chat.html')

@app.route('/chat')
def chat():
    print request.environ
    ws = request.environ.get('wsgi.websocket')
    participants.add(ws)
    try:
        while True:
            print "ws.wait()..."
            m = ws.wait()
            print "recv msg %s" % m
            if m is None:
                break
            for p in participants:
                print "send message %s" % m
                p.send(m)
    finally:
        participants.remove(ws)
    return ""

if __name__ == "__main__":
    server.listen(("0.0.0.0", 8000))
    server.run(middleware.WebSocketMiddleware(app))

Patching

meinheld provides a few monkeypatches.

Socket

This patch replaces the standard socket module.

For Example:

.. code:: python

from meinheld import patch
patch.patch_all()

For more info see http://github.com/mopemope/meinheld/tree/master/example/patch/

Performance

For parsing HTTP requests, meinheld uses Ryan Dahl's http-parser library.

(see https://github.com/joyent/http-parser)

It is built around the high performance event library picoev.

(see http://developer.cybozu.co.jp/kazuho/2009/08/picoev-a-tiny-e.html)

sendfile

meinheld uses sendfile(2), over wgsi.file_wrapper.

.. meinheld mailing list: http://groups.google.com/group/meinheld .. #meinheld: http://webchat.freenode.net/?channels=meinheld .. _freenode: http://freenode.net

Related Repositories

sanic

sanic

Async Python 3.5+ web server that's written to go fast ...

awesome-python-cn

awesome-python-cn

Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由伯乐在线持续更新。 ...

awesome-python

awesome-python

A curated list of awesome Python frameworks, libraries and software. Inspired by ...

awesome-python

awesome-python

A curated list of awesome Python frameworks, libraries and software. ...

awesome-python

awesome-python

A curated list of awesome Python frameworks, libraries and software ...


Top Contributors

mopemope methane ricardo-kagawa donspaulding awestendorf hhatto bulletmark yosisa yamaneko1212

Releases

-   v0.5.9 zip tar
-   v0.5.8 zip tar
-   v0.5.7 zip tar
-   v0.5.4 zip tar
-   v0.5.3 zip tar
-   v0.5.2 zip tar
-   v0.5.1 zip tar
-   v0.5 zip tar
-   v0.4.13 zip tar
-   v0.4.12 zip tar
-   v0.4.11 zip tar
-   v0.4.10 zip tar
-   v0.4.9 zip tar
-   v0.4.8 zip tar
-   v0.4.7 zip tar
-   v0.4.6 zip tar
-   v0.4.5 zip tar
-   v0.4.4 zip tar
-   v0.4.3 zip tar
-   v0.4.2 zip tar
-   v0.4.1 zip tar
-   v0.4 zip tar
-   v0.3.3 zip tar
-   v0.3.2 zip tar
-   v0.3.1 zip tar
-   v0.3 zip tar
-   v0.2.1 zip tar
-   v0.2 zip tar
-   v0.1.2 zip tar
-   v0.1.1 zip tar