歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網

Mod

日期:2017/3/6 14:31:31   编辑:關於Unix
第一章 簡介 1.1 性能 使用mod_python的主要優勢在於比傳統CGI更高的性能。一個 測試 ,使用在Pentium 1.2GHz的機器上運行Red Hat Linux 7.3。使用4種類型的腳本,基於標准的CGI導入模塊(以典型的Python CGI腳本開始),然後輸出'Hello!',測試10000次請求作

第一章 簡介

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是按照階段處理請求的(比如:讀取請求、處理請求頭、檢查存取等)。這些階段可以分別用處理器調用的函數來實現。傳統上,使用C語言編寫處理器模塊。mod_python提供了使用Python拜你些apache處理器擴展apache功能的方法。更多的apache請求處理過程,參考"Apache API Notes",或者參考"Mod_python-Integrating Python with Apache"文件。

為了方便的從CGI移植,標准的mod_python處理器提供了CGI模擬環境,允許用戶不修改遺留下來的腳本,而在大多數時候無需進行任何修改。

參考:

http://dev.apache.org

apache開發者資源

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服務器的挑戰與解決方法。

""" #小字體

在我多年前開發第一個WEB應用程序時就發現CGI訪問數據庫非常慢,因為每次點擊請求都會裝入解釋器並執行數MB的數據。數據庫往往都很大,並將大量時間浪費在數據庫的連接/認證等"意義重大"的事情上,像DNS查詢、編碼與解碼、內存分配等等。在應用提速的壓力下,我嘗試過使用Python和多種工具的綜合使用。我並不迷信微軟的ASP,又被Netscape的性能和滿是臭蟲而郁悶。"Cold Fusion"(冷聚變)看起來有希望,但我稍後學會了HTML類標簽的書寫方式,可讀性跟匯編有一拼。比如PHP。但是我真的很想用Python來寫東西。

就在同時有關Python互聯網編程的書籍出版了,其中將Python嵌入到Netscape服務器的方式立即引起了我的注意。我在我的項目中使用了這個例子,並在稍後開發了我自己的改進版,叫做Nsapy,並在WindowsNT和Solaris上編譯。

盡管Nsapy僅能工作在Netscape服務器上,但是出於靈活通用的面向對象設計,在Python精靈中,很容易移植到其他的WEB服務器。

後來,曾經流行的Netscape服務器掛了,我就將Nsapy移植到最流行的服務器apache上。所以從Nsapy衍生出了Httpdapy。

"""

繼續這個傳奇,你會想到將Httpdapy移植到其他服務器上,實際上他們比預想要復雜而且枯燥。

反之,提供一個類似於Perl語言的apache擴展mod_perl一樣或更好性能的部件會更有意思。

俱往矣,mod_python的第一個版本發布於2000年5月。


完成...


第二章安裝

注意:獲得關於安裝的幫助和其他問題的最好地方是mod_python的郵件列表。可以發送標題為"subscribe"的郵件到[email protected]


2.1先決條件

Python 2.2.1或更新的版本,早起版本將無法使用。

apache 2.0.40或更新的版本,如果要使用apache 1.3.x,請使用mod_python的版本2.7.x。

編譯mod_python需要有apache和Python的包含文件,並且確保安裝了Python標准庫。如果你從源代碼安裝了Python和apache,那麼你已經擁有了這些了。如果你使用了預打包軟件,如RPM或其他方式則只有二進制版本,而沒有源碼。通常apache和Python的包含文件和庫文件在各自的"development"包中。如果你不確定擁有這些重要文件,請從源碼安裝Python和apache,或者閱讀你系統的文檔以了解如何獲得開發包。


2.2編譯

有兩種鏈接apache模塊的方式:靜態的和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腳本將會分析你的運行環境,並創建自定義的Make文件用於你的系統。使用autoconf生成的./configure包含如下內容:

查看apxs程序是否存在。這個程序作為apache標准發行版的一部分提供DSO支持。如果找不到則無法實現DSO功能。使用--with-apxs指定選項:

$ ./configure --with-apxs=/usr/local/apache/bin/apxs

強烈建議使用這個選項。

檢查Python版本,並嘗試找到libpython參數變量的二進制發行版。缺省時可以在Path變量中找到python。如果找到的首個python二進制版本不適合mod_python,則可以手動指定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則configure會出錯。如果版本不對則會給出警告。一般可以忽略這個警告,除非需要重新創建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版本中的新特性

構建mod_python文檔時需要用到python的源代碼。可以如果不需要文檔,可以忽略這個選項。如果需要則用--with-python-src選項:

$ ./configure --with-python-src=/usr/src/python2.3

這個是3.2.0版本中的新特性

2.2.2運行make

開始構建過程,簡單的運行如下即可:

$ make


2.3安裝

2.3.1運行make install

這個安裝過程必須在root用戶下完成:

$ su

# make install

這將會簡單的將二進制版本復制到apache的libexec目錄。

並且會安裝python-libraries到site-packages並編譯他們。

如果你想只安裝python庫或者只安裝DSO,可以用如下make目標:

# make install_py_lib

# make install_dso

2.3.2配置apache

按照DSO模式安裝的apache,需要在httpd.conf中加入啟動mod_python的句子:

LoadModule python_module libexec/mod_python.so

實際的mod_python.so路徑可能有所變化,但是make install將會顯示這個文件的確切路徑。


2.4測試

注意次部分內容僅適用於3.x版本,如果使用2.7.x版本,你需要找到更適合的文檔。

創建一個在WEB站點可見的目錄,如htdocs/test。

在httpd.conf或者.htaclearcase/" target="_blank" >ccess文件中添加如下內容。如果是在.htaccess文件中,則無需<Directory>標簽。並且確保httpd.conf文件中的AllowOverride目標至少包含FileInfo,缺省是None,將會無法工作。

<Directory /APACHEHOME/htdocs/test>

AddHandler mod_python .py

PythonHandler mptest

PythonDebug On

</Directory>

重定向所有以.py結尾的URL到mod_python處理器。mod_python收到請求之後查找合適的處理器來處理請求。這裡有個簡單的自定義處理器叫mptest。我們看看如何定義這個處理器。

此時如果修改了主配置文件httpd.conf則需要重啟apache來使之生效。

編輯mptest.py文件在htdocs/test目錄。

from mod_python import apache

def handler(req):

req.content_type='text/plain'

req.write("Hello, world!")

return apache.OK

指向URL路徑到mptest.py。將會看到"Hello, world!"。如果看不到則參考故障處理。

依照配置文件的規則,指定任何.py文件都會最終指向mptest.py做處理。因為已經明確的指定了mptest做處理器。如果需要用不同的處理器處理不同的文件則需要更高層的處理器,比如publisher發布器、mpservlets或vampire。這些都是動態裝入的處理器。

如果都運行無誤則轉入第三章,入門。

參考:

http://home.comcast.net/d.popowich/mpservlets

http://www.dscpl.com.au/projects/vampire


2.5故障處理

如果出現問題,可以按照如下的處理:

檢查錯誤輸出

檢查服務器錯誤日志

單處理執行apache

$ ./httpd -X

這樣將會顯示更多有用信息

從mod_python3.2.0開始,可以使用mod_python.testhandler來診斷你的配置。添加到httpd.conf文件:

<Location /mpinfo>

SetHandler mod_python

PythonHandler mod_python.testhandler

</Location>

這時指向你的/mpinfo的URL則會顯示一些信息幫助處理mod_python的問題。

在mod_python郵件列表提問,並確保提供如下信息:

mod_python版本

操作系統類型、名字、版本號

Python版本、非常規的編輯選項

apache服務器版本

相關的apache配置,.htaccess

相關的Python代碼


完成...

[1] [2] [3] [4] [5] [6] [7] [8] 下一頁

Copyright © Linux教程網 All Rights Reserved