安装
apt-get install python2.7-dev pip install uwsgi
配置
[uwsgi] socket = 127.0.0.1:3031 chdir = /home/busuncle/uwsgi wsgi-file = uwsgi_main.py master = true processes = 2 threads = 2 stats = 127.0.0.1:3131 daemonize = uwsgi.log pidfile = uwsgi.pid
控制脚本
# start uwsgi uwsgi_conf.ini # reload kill -HUP `cat uwsgi.pid` # stop kill -9 `cat uwsgi.pid`
例子
import os import urllib2 import socket import cStringIO import Image import redis import config as cfg BASE_PATH = "uwsgi" HTTP_STATUS = { 200: "200 OK", 404: "404 Not Found", } red = redis.StrictRedis(host=cfg.REDIS.HOST, port=cfg.REDIS.PORT, db=cfg.REDIS.DB) def _get_child_path(path_info): path_list = path_info.split("/") res = [] for path in path_list: if path == BASE_PATH or len(path) == 0: continue res.append("/" + path) return "".join(res) def _get_params(query_string): params = query_string.split("&") res = {} for p in params: k, v = p.split("=") res[k] = v return res def resize_img(img_url, w, h, save_type="PNG"): # image resize cache_time = 3600 * 24 * 30 img_cache = red.get(img_url) if img_cache is not None: #print "%s is in redis" % img_url return {"code": 1, "new_img": img_cache} w, h = int(w), int(h) if w <= 0 or h <= 0: return {"code": -1, "new_img": None} new_size = (w, h) try: req = urllib2.urlopen(img_url, timeout=30) cont = req.read() except urllib2.URLError, err: if isinstance(err.reason, socket.timeout): return {"code": -1, "new_img": None} fp = cStringIO.StringIO(cont) img = Image.open(fp) new_img = img.resize(new_size) output_fp = cStringIO.StringIO() new_img.save(output_fp, save_type) img_cache = output_fp.getvalue() output_fp.close() red.set(img_url, img_cache) red.expire(img_url, cache_time) return {"code": 1, "new_img": img_cache} def application(env, start_response): # entrance response_status = HTTP_STATUS[200] response_headers = [] child_path = _get_child_path(env["PATH_INFO"]) params = _get_params(env["QUERY_STRING"]) response_body = "" if child_path == "/resize_img": res = resize_img(params["img_url"], params["w"], params["h"]) if res["code"] == 1: response_headers.append(('Content-Type','image/jpeg')) response_body = res["new_img"] else: response_status = HTTP_STATUS[404] start_response(response_status, response_headers) return [response_body] if __name__ == "__main__": print "==================== test begin ==========================" #print _get_child_path("/uwsgi/img") print _get_params("url=http://www.google.com") print "==================== test end =========================="