Djangoday lt 20120420

WEBdeBS
10 uWSGI tricks
                        Roberto De Ioris (Unbit)
                           DjangoDay 2012




giovedì 26 aprile 12
Trick 1:
                          pip install uwsgitop
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 http-socket = :8080
                 stats = 127.0.0.1:4040




giovedì 26 aprile 12
uwsgitop 127.0.0.1:4040




giovedì 26 aprile 12
Trick 2:
                       sessions cleaner via cron
                   from uwsgidecorators import *
                 from django.contrib.sessions.models import Session

                 # equivalent to 40 2 * * *
                 @cron(40, 2, -1, -1, -1)
                 def clear_django_session(num):
                     print("it's 2:40: clearing django sessions")
                     Session.objects.all().delete()




giovedì 26 aprile 12
Trick 3:
                           requests offloading
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032
                 route = ^/oldsite uwsgi:192.168.0.17:3030,0,0
                 route = ^/oldersite uwsgi:/tmp/socket,0,0
                 route = ^/foo uwsgi:192.168.0.22:3031,0,0


giovedì 26 aprile 12
Trick 4:
                         attaching daemons
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032
                 attach-daemon = memcached -p 5050 -m 64
                 attach-daemon = memcached -p 6060 -m 100
                 attach-daemon = redis-server redis.conf


giovedì 26 aprile 12
Trick 5:
                  autoreloading (during development)
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032
                 python-autoreload = 3




giovedì 26 aprile 12
Trick 6:
                       adaptive process spawning
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 20
                 socket = 192.168.0.1:3032
                 cheaper = 2




giovedì 26 aprile 12
Trick 7:
                               reload on exception
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032
                 reload-on-exception-type = MyException
                 reload-on-exception-repr = psycopg2.InterfaceError: connection already closed




giovedì 26 aprile 12
Trick 8:
                            aliasing modules
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032
                 pymodule-alias = fooapp.models=/tmp/testmodel.py
                 pymodule-alias = anotherapp.view=/tmp/viste.py
                 pymodule-alias = uglyapp=/tmp/ugliestapp


giovedì 26 aprile 12
Trick 9:
                                 virtualenv
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032
                 virtualenv = /var/www/envs/foo




giovedì 26 aprile 12
Trick 10:
                                placeholders
                 [uwsgi]
                 applicazione = /var/www/myapp
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032

                 wsgi-file = %(applicazione)/wsgi.py




giovedì 26 aprile 12
Bonus Trick:
                                   KSM
                 [uwsgi]
                 wsgi-file = /var/www/myapp/wsgi.py
                 master = true
                 processes = 4
                 socket = 192.168.0.1:3032
                 ksm = 10




giovedì 26 aprile 12
1 of 13

Recommended

Digital Forensics by
Digital ForensicsDigital Forensics
Digital ForensicsUniversità Degli Studi Di Salerno
117 views115 slides
nginx + uwsgi emperor + bottle by
nginx + uwsgi emperor + bottlenginx + uwsgi emperor + bottle
nginx + uwsgi emperor + bottleJordi Soucheiron
3.6K views11 slides
Legal Pirlo by
Legal PirloLegal Pirlo
Legal PirloWEBdeBS
1.1K views27 slides
Nodejsconf 2012 by
Nodejsconf 2012Nodejsconf 2012
Nodejsconf 2012WEBdeBS
1.3K views19 slides
Mockup, wireframe e visual: una breve introduzione by
Mockup, wireframe e visual: una breve introduzioneMockup, wireframe e visual: una breve introduzione
Mockup, wireframe e visual: una breve introduzioneWEBdeBS
4K views52 slides
Unbit djangoday 20120419 by
Unbit djangoday 20120419Unbit djangoday 20120419
Unbit djangoday 20120419WEBdeBS
2.4K views31 slides

More Related Content

More from WEBdeBS

Virtualenv by
VirtualenvVirtualenv
VirtualenvWEBdeBS
2.1K views42 slides
Fagungis by
FagungisFagungis
FagungisWEBdeBS
342 views43 slides
Django e il Rap Elia Contini by
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia ContiniWEBdeBS
522 views10 slides
Iga workflow by
Iga workflowIga workflow
Iga workflowWEBdeBS
620 views25 slides
PepperTweet - Project presentation Startup Weekend Brescia by
PepperTweet - Project presentation Startup Weekend BresciaPepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend BresciaWEBdeBS
710 views22 slides
Peppertweet - Presentazione Startup Weekend Brescia by
Peppertweet - Presentazione Startup Weekend BresciaPeppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend BresciaWEBdeBS
353 views22 slides

More from WEBdeBS (8)

Virtualenv by WEBdeBS
VirtualenvVirtualenv
Virtualenv
WEBdeBS 2.1K views
Fagungis by WEBdeBS
FagungisFagungis
Fagungis
WEBdeBS 342 views
Django e il Rap Elia Contini by WEBdeBS
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia Contini
WEBdeBS 522 views
Iga workflow by WEBdeBS
Iga workflowIga workflow
Iga workflow
WEBdeBS 620 views
PepperTweet - Project presentation Startup Weekend Brescia by WEBdeBS
PepperTweet - Project presentation Startup Weekend BresciaPepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend Brescia
WEBdeBS 710 views
Peppertweet - Presentazione Startup Weekend Brescia by WEBdeBS
Peppertweet - Presentazione Startup Weekend BresciaPeppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend Brescia
WEBdeBS 353 views
NoSql Day - Chiusura by WEBdeBS
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - Chiusura
WEBdeBS 604 views
NoSql Day - Apertura by WEBdeBS
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - Apertura
WEBdeBS 624 views

Djangoday lt 20120420

  • 1. 10 uWSGI tricks Roberto De Ioris (Unbit) DjangoDay 2012 giovedì 26 aprile 12
  • 2. Trick 1: pip install uwsgitop [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 http-socket = :8080 stats = 127.0.0.1:4040 giovedì 26 aprile 12
  • 4. Trick 2: sessions cleaner via cron from uwsgidecorators import * from django.contrib.sessions.models import Session # equivalent to 40 2 * * * @cron(40, 2, -1, -1, -1) def clear_django_session(num): print("it's 2:40: clearing django sessions") Session.objects.all().delete() giovedì 26 aprile 12
  • 5. Trick 3: requests offloading [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 socket = 192.168.0.1:3032 route = ^/oldsite uwsgi:192.168.0.17:3030,0,0 route = ^/oldersite uwsgi:/tmp/socket,0,0 route = ^/foo uwsgi:192.168.0.22:3031,0,0 giovedì 26 aprile 12
  • 6. Trick 4: attaching daemons [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 socket = 192.168.0.1:3032 attach-daemon = memcached -p 5050 -m 64 attach-daemon = memcached -p 6060 -m 100 attach-daemon = redis-server redis.conf giovedì 26 aprile 12
  • 7. Trick 5: autoreloading (during development) [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 socket = 192.168.0.1:3032 python-autoreload = 3 giovedì 26 aprile 12
  • 8. Trick 6: adaptive process spawning [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 20 socket = 192.168.0.1:3032 cheaper = 2 giovedì 26 aprile 12
  • 9. Trick 7: reload on exception [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 socket = 192.168.0.1:3032 reload-on-exception-type = MyException reload-on-exception-repr = psycopg2.InterfaceError: connection already closed giovedì 26 aprile 12
  • 10. Trick 8: aliasing modules [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 socket = 192.168.0.1:3032 pymodule-alias = fooapp.models=/tmp/testmodel.py pymodule-alias = anotherapp.view=/tmp/viste.py pymodule-alias = uglyapp=/tmp/ugliestapp giovedì 26 aprile 12
  • 11. Trick 9: virtualenv [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 socket = 192.168.0.1:3032 virtualenv = /var/www/envs/foo giovedì 26 aprile 12
  • 12. Trick 10: placeholders [uwsgi] applicazione = /var/www/myapp master = true processes = 4 socket = 192.168.0.1:3032 wsgi-file = %(applicazione)/wsgi.py giovedì 26 aprile 12
  • 13. Bonus Trick: KSM [uwsgi] wsgi-file = /var/www/myapp/wsgi.py master = true processes = 4 socket = 192.168.0.1:3032 ksm = 10 giovedì 26 aprile 12