- 论坛徽章:
- 0
|
我是用的flup做的fcgi,用着还可以,大概如下
lighttpd配置:
server.modules += ("mod_fastcgi")
fastcgi.server=( "/fcgi/something" =>
(
"some" => (
"bin-path" => "/usr/bin/python /opt/some/server/some_fcgi.py parameter",
"socket" => "/tmp/fcgi.sock",
"max-procs" => 1, #这个可以调,想要lighttpd启动是开几个进程就写几个
"check-local" => "disable",
)
),
)
脚本:
我就挑必须的写了哦
import httplib
import threading #这个可以有,也可以没有,在一个进程中flup会把多个请求发过来,以多线程方式运行,如果有全局变量或不可重入函数,请加锁
global_lock = threading.Lock()
.
.
def blablabla():
#加锁小心代码段异常,把自己锁死,还是要加上finally比较保险
try:
global_lock.acquire()
somecode...
finally:
global_lock.release()
.
.
#code 422不常用,httplib里的responses里竟然没有
def http_response(code):
if code == 422:
return '422 Unprocessable Entity'
return '%s %s' % (code,httplib.responses[code])
def main_app(environ, start_response): #主调用函数,environ是一个字典,包含了所有http传过来的东西,你自己打印下就知道了
#start_response是一个函数,把response code 和header给它
http_cmd = http_response(httplib.OK)
http_header = [('Content-Type', 'text/plain')]
http_content = ''"
#处理主体,根据情况修改 http_cmd,http_header,http_content
.
.
start_response(http_cmd,http_header)
return [http_content]
if __name__ == '__main__':
#这里想干点啥都行
.
.
#启动主循环
from flup.server.fcgi import WSGIServer
WSGIServer(main_app).run()
基本上就这样 |
|