WSGI, Django, Gunicorn

4 months ago

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Do you like this presentation?

No comments yet

Post a comment

    Login or Signup to post a comment
    Login to SlideShare
    Login to Twitter
    Edit your comment Cancel

    4 Favorites

    WSGI, Django, Gunicorn - Presentation Transcript

    1. WSGI, Django & Gunicorn Benoît Chesneau 25/04/2010 - djangocong Sunday, April 25, 2010
    2. benoît chesneau benoitc@apache.org Artisan web Minimal web & Opensource Enki Multimedia http://www.e-engura.com Sunday, April 25, 2010
    3. • WSGI ? • Django & WSGI • Gunicorn Sunday, April 25, 2010
    4. WSGI ? • Web Server Gateway Interface • PEP 333 • Interface entre le web et une application Python Sunday, April 25, 2010
    5. Serveur web WSGI Application Python Sunday, April 25, 2010
    6. simple application def app(environ, start_response): """Simplest possible application object""" data = 'Hello, World!n' status = '200 OK' response_headers = [ ('Content-type','text/plain'), ('Content-Length', str(len(data))) ] start_response(status, response_headers) return iter([data]) Sunday, April 25, 2010
    7. WSGI ? • Réutilisation d’applications • Middleware • Paster • Frameworks: webob, werkzeug, bottle, repoze, ... Sunday, April 25, 2010
    8. Middleware WSGI class CustomHeader(object): def __init__(self, app): self.app = app def __call__(self, environ, start_response): environ["HTTP_X_MY_HEADER"] = "1" return self.app(environ, start_response) Sunday, April 25, 2010
    9. Serveur web WSGI Application Python App App App Sunday, April 25, 2010
    10. Django & WSGI Sunday, April 25, 2010
    11. Intégrer • Pourquoi réinventer la roue ? • Principes communs: middlewares, request, ... • Réutiliser les applications. • intégrer != compatible wsgi Sunday, April 25, 2010
    12. • django-wsgi • twod.wsgi Sunday, April 25, 2010
    13. django-wsgi • pas de dependance • permet d’embarquer des apps wsgi, `django_view` • permet de creer une app wsgi à partir d’une vue ou des urls, `wsgi_application` Sunday, April 25, 2010
    14. django_view def test_app(environ, start_response): start_response("200 OK", [("Content-type", "text/ html")]) yield "i suck" def test_app1(request): return HttpResponse("wowa, meta") urls = patterns("", .. (r"^test/$", django_view(test_app)), (r"^(?P<name>.*?)/$", test_app1), .. ) application = wsgi_application(urls) Sunday, April 25, 2010
    15. twod.wsgi • vise à créer une "paserelle coopérative" entre Django et WSGI • basé sur webob (wrap HttpRequest et HttpResponse) • Paste deploy factory • Middleware pour le routage Sunday, April 25, 2010
    16. twod.wsgi - embed import os from twod.wsgi import DjangoApplication os.environ['DJANGO_SETTINGS_MODULE'] = "yourpackage.settings" django_app = DjangoApplication() Sunday, April 25, 2010
    17. twod.wsgi routing args (r'^/blog/posts/(?<post_slug>w+)/comments/(? <post_comment_id>d+)$' >>> request.urlvars {'post_slug': "hello-world", 'post_comment_id': "3"} Sunday, April 25, 2010
    18. twod.wsgi - embed • intégrer une application WSGI au sein de votre projet django • modifier les requêtes/réponses • Integrer votre app django dans une app WSGI Sunday, April 25, 2010
    19. embarque les apps WSGI from twod.wsgi import call_wsgi_app from somewhere import wsgi_app def run_app(request, path_info): response = call_wsgi_app(wsgi_app, request, path_info) response['Server'] = "twod.wsgi 1.0" return response Sunday, April 25, 2010
    20. Déployer • l’utilisation courante de Django avec WSGI • 2 types de deploiements : • via serveur • via proxy Sunday, April 25, 2010
    21. Serveur • uWSGI • mod_proxy Sunday, April 25, 2010
    22. proxy • spawning, paster, ... • cherrypy, .. • gunicorn Sunday, April 25, 2010
    23. Sunday, April 25, 2010
    24. Sunday, April 25, 2010
    25. gunicorn • Green unicorn • WSGI 1.0, clients lents et rapides • supporte WSGI, Paster compatible app & ... Django • Load balancing via pre-fork and un socket partagé • Upgrade à chaud “à la nginx” Sunday, April 25, 2010
    26. mais encore... • HTTP Stream. Décode le HTTP à la volée • Gestion des connexions asynchrones (longpolling, comet, websockets, appels d’api, ...). • Eventlet, Gevent, Tornado • DSL Config Sunday, April 25, 2010
    27. Philosophie • Simple • Minimal • Performant • Unix Sunday, April 25, 2010
    28. Simple • gunicorn_django -w 3 /myproject/ settings.py • ./manage.py run_django -w 3 • gunicorn_django -w 3 -k “egg:gunicorn#eventlet” /myproject/ settings.py Sunday, April 25, 2010
    29. Simple • Taille memoire controllée • Derrière NGINX • Full Python • Graceful Reload Sunday, April 25, 2010
    30. http://www.peterbe.com/plog/fcgi-vs-gunicorn-vs-uwsgi gunicorn is the winner in my eyes. It's easy to configure and get up and running and certainly fast enough [..] . Sunday, April 25, 2010
    31. DEMO Sunday, April 25, 2010
    32. 0.9 • Parseur HTTP en C (fallback en python sur les plateformes non supportées) • Increase unitests • Reload hook • status ? Sunday, April 25, 2010
    33. Liens • http://gunicorn.org • http://e-engura.org • http://www.python.org/dev/peps/pep-0333/ • http://bitbucket.org/2degrees/twod.wsgi/ • http://github.com/alex/django-wsgi Sunday, April 25, 2010
    34. Questions Sunday, April 25, 2010
    35. @benoitc Sunday, April 25, 2010
    36. Cette création est mise à disposition selon le Contrat Paternité 2.0 France disponible en ligne http:// creativecommons.org/licenses/by/2.0/fr/ ou par courrier postal à Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA. Sunday, April 25, 2010

    beoitcbeoitc + Follow

    1719 views, 4 favs, 1 embed more

    About this presentation

    Usage Rights

    © All Rights Reserved

    Stats

    • 4 Favorites
    • 0 Comments
    • 14 Downloads
    • 1,635 Views on
      SlideShare
    • 84 Views on
      Embeds
    • 1,719 Total Views

    Embed views

    • 84 views on http://www.slideshare.net

    more

    Embed views

    • 84 views on http://www.slideshare.net

    less

    Accessibility

    Additional Details

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint

    Follow SlideShare