收藏 分享(赏)

mod_python_3.2.8中文手册.doc

上传人:无敌 文档编号:615762 上传时间:2018-04-15 格式:DOC 页数:81 大小:205.50KB
下载 相关 举报
mod_python_3.2.8中文手册.doc_第1页
第1页 / 共81页
mod_python_3.2.8中文手册.doc_第2页
第2页 / 共81页
mod_python_3.2.8中文手册.doc_第3页
第3页 / 共81页
mod_python_3.2.8中文手册.doc_第4页
第4页 / 共81页
mod_python_3.2.8中文手册.doc_第5页
第5页 / 共81页
点击查看更多>>
资源描述

1、第一章简介1.1 性能使用 mod_python 的主要优势在于比传统 CGI 更高的性能。一个测试,使用在 Pentium 1.2GHz 的机器上运行 Red Hat Linux 7.3。使用 4 种类型的脚本,基于标准的 CGI 导入模块( 以典型的 Python CGI 脚本开始) ,然后输出Hello!,测试 10000 次请求作为基准。标准 CGI: 23 次请求/秒mod_python CGI 处理器: 385 次请求/ 秒mod_python 发布处理器: 476 次请求/秒mod_python 处理器: 1203 次请求/秒1.2 可移植性apache 是按照阶段处理请求的(比

2、如:读取请求、处理请求头、检查存取等)。这些阶段可以分别用处理器调用的函数来实现。传统上,使用 C 语言编写处理器模块。mod_python 提供了使用 Python 拜你些 apache 处理器扩展 apache 功能的方法。更多的 apache 请求处理过程,参考“Apache API Notes“,或者参考“Mod_python-Integrating Python with Apache“文件。为了方便的从 CGI 移植,标准的 mod_python 处理器提供了 CGI 模拟环境,允许用户不修改遗留下来的脚本,而在大多数时候无需进行任何修改。参考:http:/dev.apache.o

3、rgapache 开发者资源http:/www.modpython.org/python10/mod_python-整合 Python 和 Apache,出现在 Python 10(?)1.3 历史mod_python 起源于 Httpdapy 项目(1997)。很久以后 Httpdapy 才被叫做 mod_python,因为 Httpdapy 并不是特定用于 apache 服务器的。Httpdapy 设计成跨平台的,而实际上主要从 Netscape 服务器开始( 追溯到1997 年的 Nsapy)。摘录自 Httpdapy 项目的 README 文件的描述将 Python 嵌入到apache

4、 服务器的挑战与解决方法。“ #小字体在我多年前开发第一个 WEB 应用程序时就发现 CGI 访问数据库非常慢,因为每次点击请求都会装入解释器并执行数 MB 的数据。数据库往往都很大,并将大量时间浪费在数据库的连接/认证等“ 意义重大 “的事情上,像 DNS 查询、编码与解码、内存分配等等。在应用提速的压力下,我尝试过使用 Python 和多种工具的综合使用。我并不迷信微软的 ASP,又被 Netscape 的性能和满是臭虫而郁闷。“Cold Fusion“(冷聚变)看起来有希望,但我稍后学会了HTML 类标签的书写方式,可读性跟汇编有一拼。比如 PHP。但是我真的很想用 Python 来写东

5、西。就在同时有关 Python 互联网编程的书籍出版了,其中将 Python 嵌入到Netscape 服务器的方式立即引起了我的注意。我在我的项目中使用了这个例子,并在稍后开发了我自己的改进版,叫做 Nsapy,并在 WindowsNT 和Solaris 上编译。尽管 Nsapy 仅能工作在 Netscape 服务器上,但是出于灵活通用的面向对象设计,在 Python 精灵中,很容易移植到其他的 WEB 服务器。后来,曾经流行的 Netscape 服务器挂了,我就将 Nsapy 移植到最流行的服务器 apache 上。所以从 Nsapy 衍生出了 Httpdapy。“继续这个传奇,你会想到将

6、Httpdapy 移植到其他服务器上,实际上他们比预想要复杂而且枯燥。反之,提供一个类似于 Perl 语言的 apache 扩展 mod_perl 一样或更好性能的部件会更有意思。俱往矣,mod_python 的第一个版本发布于 2000 年 5 月。完成.第二章安装注意:获得关于安装的帮助和其他问题的最好地方是 mod_python 的邮件列表。可以发送标题为“subscribe“ 的邮件到 mod_python-requestmodpython.org。2.1 先决条件 Python 2.2.1 或更新的版本,早起版本将无法使用。 apache 2.0.40 或更新的版本,如果要使用 ap

7、ache 1.3.x,请使用mod_python 的版本 2.7.x。编译 mod_python 需要有 apache 和 Python 的包含文件,并且确保安装了 Python 标准库。如果你从源代码安装了 Python 和 apache,那么你已经拥有了这些了。如果你使用了预打包软件,如 RPM 或其他方式则只有二进制版本,而没有源码。通常 apache 和 Python 的包含文件和库文件在各自的“development“包中。如果你不确定拥有这些重要文件,请从源码安装Python 和 apache,或者阅读你系统的文档以了解如何获得开发包。2.2 编译有两种链接 apache 模块的方

8、式:静态的和 DSO 方式。DSO 方式现在非常流行,并推荐用于 mod_python 的安装。模块被编译成共享库,并在运行时动态装入。DSO 方式的优势在于安装模块时无需重新编译 apache。关于 DSO 机制的详细信息参见 http:/httpd.apache.org/docs-2.0/dso.html。当前版本的 mod_python 仅支持 DSO 方式。静态链接是一种较老的方式,比动态连接的方式支持更多的平台,但是较少使用。主要的缺陷是必须要重新编译 apache,在很多情况下并不是一个好的选择。2.2.1 运行 ./configure./configure 脚本将会分析你的运行环

9、境,并创建自定义的 Make 文件用于你的系统。使用 autoconf 生成的./configure 包含如下内容: 查看 apxs 程序是否存在。这个程序作为 apache 标准发行版的一部分提供 DSO 支持。如果找不到则无法实现 DSO 功能。使用-with-apxs指定选项:$ ./configure -with-apxs=/usr/local/apache/bin/apxs强烈建议使用这个选项。 检查 Python 版本,并尝试找到 libpython 参数变量的二进制发行版。缺省时可以在 Path 变量中找到 python。如果找到的首个 python 二进制版本不适合 mod_p

10、ython,则可以手动指定 python 的路径使用-with-python,如:$ ./configure -with-python=/usr/local/bin/python2.3 设置 mod_python 保留的互斥锁数量。在某些系统中,互斥锁是一种有限的资源。增加最大互斥锁数量将会增加使用 session 锁定的性能。缺省值是 8,一个性能不错的数值是 32。使用-with-max-locks 选项:$ ./configure -with-max-locks=32这个选项是在 3.2.0 版本开始提供的。 尝试查找 flex 并确定版本。如果 PATH 中找不到 flex 则 con

11、figure会出错。如果版本不对则会给出警告。一般可以忽略这个警告,除非需要重新创建 src/psp_parser.c。剖析器(parser)会被 PSP 调用,使用 flex 的 C 语言书写。要求的版本是 2.5.31,在大多数平台上2.5.4 并不合适。所以已经源码里已经包含了一个 psp_parser.c 的副本。如果需要编译 src/psp_parser.c 则需要获取正确版本的flex。如果 PATH 中的 flex 版本有误,则可用-with-flex 选项:$ ./configure -with-flex=/usr/local/bin/flex这是 3.2.0 版本中的新特性

12、构建 mod_python 文档时需要用到 python 的源代码。可以如果不需要文档,可以忽略这个选项。如果需要则用-with-python-src 选项:$ ./configure -with-python-src=/usr/src/python2.3这个是 3.2.0 版本中的新特性2.2.2 运行 make开始构建过程,简单的运行如下即可:$ make2.3 安装2.3.1 运行 make install这个安装过程必须在 root 用户下完成:$ su# make install这将会简单的将二进制版本复制到 apache 的 libexec 目录。并且会安装 python-libr

13、aries 到 site-packages 并编译他们。如果你想只安装 python 库或者只安装 DSO,可以用如下 make 目标:# make install_py_lib# make install_dso2.3.2 配置 apache按照 DSO 模式安装的 apache,需要在 httpd.conf 中加入启动mod_python 的句子:LoadModule python_module libexec/mod_python.so实际的 mod_python.so 路径可能有所变化,但是 make install 将会显示这个文件的确切路径。2.4 测试注意次部分内容仅适用于 3.

14、x 版本,如果使用 2.7.x 版本,你需要找到更适合的文档。 创建一个在 WEB 站点可见的目录,如 htdocs/test。 在 httpd.conf 或者.htaccess 文件中添加如下内容。如果是在.htaccess 文件中,则无需 标签。并且确保httpd.conf 文件中的 AllowOverride 目标至少包含 FileInfo,缺省是 None,将会无法工作。AddHandler mod_python .pyPythonHandler mptestPythonDebug On 重定向所有以.py 结尾的 URL 到 mod_python 处理器。mod_python收到请求

15、之后查找合适的处理器来处理请求。这里有个简单的自定义处理器叫 mptest。我们看看如何定义这个处理器。 此时如果修改了主配置文件 httpd.conf 则需要重启 apache 来使之生效。 编辑 mptest.py 文件在 htdocs/test 目录。from mod_python import apachedef handler(req):req.content_type=text/plainreq.write(“Hello, world!“)return apache.OK 指向 URL 路径到 mptest.py。将会看到“Hello, world!“。如果看不到则参考故障处理。

16、依照配置文件的规则,指定任何.py 文件都会最终指向 mptest.py 做处理。因为已经明确的指定了 mptest 做处理器。如果需要用不同的处理器处理不同的文件则需要更高层的处理器,比如 publisher 发布器、mpservlets 或 vampire。这些都是动态装入的处理器。 如果都运行无误则转入第三章,入门。参考:http:/ 故障处理如果出现问题,可以按照如下的处理: 检查错误输出 检查服务器错误日志 单处理执行 apache$ ./httpd -X这样将会显示更多有用信息 从 mod_python3.2.0 开始,可以使用 mod_python.testhandler来诊断你

17、的配置。添加到 httpd.conf 文件:SetHandler mod_pythonPythonHandler mod_python.testhandler这时指向你的/mpinfo 的 URL 则会显示一些信息帮助处理 mod_python的问题。 在 mod_python 邮件列表提问,并确保提供如下信息:mod_python 版本操作系统类型、名字、版本号Python 版本、非常规的编辑选项apache 服务器版本相关的 apache 配置,.htaccess相关的 Python 代码完成.第三章指南3.1 使用发布器(Publisher)的快速例子这一节提供无需太多细节的发布器指南。

18、更多如何使用 mod_python 处理器的细节将在以后解释。发布器(publisher)提供了发布 mod_python 标准模块的方式。需要在配置文件中加入如下配置:AddHandler mod_python .pyPythonHandler mod_python.publisherPythonDebug On下例会返回简单的表单数据。询问姓名、电子邮件、注释之后将会给管理员发邮件。这个简单的应用程序由两个文件组成:form.html 用于提交数据,form.py 用于处理表单动作。如下是表单:Please provide feedback below:Name: Email: Comme

19、nt: 注意表单的 action 属性指向 form.py/email 调用,如下创建form.py,如下:import smtplibWEBMASTER=“webmaster“ #管理员电邮SMTP_SERVER=“localhost“ #本机 SMTP 服务器def email(req,name,email,comment):#一定要确保用户提供了所有的参数if not(name and email and comment):return “缺少必要的参数 “#创建消息文本msg=“ From: %sSubject: feedbackTo: %sI have the following c

20、omment:%sThank You,%s“ % (email,WEBMASTER,comment,name)#发送信息conn=smtplib.SMTP(SMTP_SERVER)conn.sendmail(email,WEBMASTER,msg)conn.quit()#提供返回页面s=“Dear %s,Thank you for your kind comments, wewill get back to you shortly.“ % namereturn name当用户点击提交按钮时,发布器将会装入 email 函数到 form 模块,传递表单字段作为关键字参数。也会传递请求对象到 req。注意逆必须要有 req 参数。发布器已经可以很聪明的传递必要的参数。函数的返回值将被发送到客户端浏览器。即使使用发布器可以非常简单的处理,但是程序仍然可以利用mod_python 的强大功能,比如调用请求对象。当然也可以调用本地的mod_python 处理器来完成大量的工作。比如设置 HTML 头路由req.headers_out;返回错误抛出 apache.SERVER_ERROR 异常;从客户端的重定向读写文件 req.write()和 req.read(),等等。阅读 6.1 节了解更多关于发布器的详细信息。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 产品手册

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报