SlideShare a Scribd company logo
1 of 13
Download to read offline
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

More Related Content

More from WEBdeBS

Virtualenv
VirtualenvVirtualenv
VirtualenvWEBdeBS
 
Django e il Rap Elia Contini
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia ContiniWEBdeBS
 
Iga workflow
Iga workflowIga workflow
Iga workflowWEBdeBS
 
PepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend BresciaPepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend BresciaWEBdeBS
 
Peppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend BresciaPeppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend BresciaWEBdeBS
 
NoSql Day - Chiusura
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - ChiusuraWEBdeBS
 
NoSql Day - Apertura
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - AperturaWEBdeBS
 

More from WEBdeBS (8)

Virtualenv
VirtualenvVirtualenv
Virtualenv
 
Fagungis
FagungisFagungis
Fagungis
 
Django e il Rap Elia Contini
Django e il Rap Elia ContiniDjango e il Rap Elia Contini
Django e il Rap Elia Contini
 
Iga workflow
Iga workflowIga workflow
Iga workflow
 
PepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend BresciaPepperTweet - Project presentation Startup Weekend Brescia
PepperTweet - Project presentation Startup Weekend Brescia
 
Peppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend BresciaPeppertweet - Presentazione Startup Weekend Brescia
Peppertweet - Presentazione Startup Weekend Brescia
 
NoSql Day - Chiusura
NoSql Day - ChiusuraNoSql Day - Chiusura
NoSql Day - Chiusura
 
NoSql Day - Apertura
NoSql Day - AperturaNoSql Day - Apertura
NoSql Day - Apertura
 

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