网上更多文章是用Django、webpy等框架的前提下,由于我只是用其CGI而不是搞纯web开发,所以暂时不打算用这类框架,直接用flup包(其实大多数框架WSGI也是封装的flup)。
废话不多说,进入正题,先看下需要的环境和工具:
1、Linux2.6(废话- -!)
2、Nginx(需包含fastcgi模块)
3、Spawn-fcgi (官方下载:http://redmine.lighttpd.net/projects/spawn-fcgi/wiki)
4、Python
5、flup(官方下载:http://trac.saddi.com/flup)
安装都是些常规方法,就不一一介绍了
nginx的fastcgi配置照搬php的即可。
先上张简单画的原理图
spawn-fcgi是个工具,用来以fastcgi方式开启多个WSGIServer进程。
例:
spawn-fcgi -f /data/WSGIServer.py -a 127.0.0.1 -p 5678 -u www -F 5
-f WSGIServer脚本的决定路径
-a fastcgi绑定的ip
-p fastcgi绑定的端口
-u 已什么身份运行
-F 要启动的进程数(很多人以为是-C,其实那是PHP专用的,这里要用-F)
需要编码的部分就是WSGIServer这里了,贴个简单测试代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import flup.server.fcgi as flups
def application(environ, start_response):
"""该函数可以写成模块import导入"""
ret = ""
try:
uri = environ['PATH_INFO']
if uri[-1] == "/":
uri = uri[:-1]
if uri == "":
ret = str(environ)
elif uri == "/sleep":
import time
time.sleep(5)
ret = "sleep: 5 secends"
else:
ret = uri
except Exception, e:
ret = str(e)
status = '200 OK'
response_headers = [('Content-type','text/plain')]
start_response(status, response_headers)
return [ret]
if __name__ == "__main__":
#直接用python运行
#flups.WSGIServer(application, multithreaded=True, multiprocess=False, bindAddress=('127.0.0.1', 5678)).run()
#fastcgi方式运行
flups.WSGIServer(application).run()
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com