2013-05-08 27 views
1

我對Python和Python web應用程序開發相對較新。目前我正在使用mod_wsgi在Python中創建一個hello world應用程序Python mod_wsgi應用程序的奇怪行爲

這是我的配置。

Apache配置

<VirtualHost *:80> 
    ServerName mysite.com 
    DocumentRoot /var/www/mysite 

    WSGIDaemonProcess mysite threads=5 
    WSGIScriptAlias//var/www/mysite/mysite.wsgi 
    WSGIProcessGroup mysite 

    <Directory /var/www/mysite> 
     WSGIProcessGroup mysite 
     WSGIApplicationGroup %{GLOBAL} 
     Order deny,allow 
     Allow from all 
    </Directory> 
</VirtualHost> 

mysite.wsgi

import os 
import sys 

path='/var/www/mysite' 
if path not in sys.path: 
    sys.path.append(path) 

import mysite.app 

application = mysite.app.App() 

app.py

import mysite.log as log 

logger = log.custom_logger('root') 
logger.debug('I am included only once') 

class App: 

    """ 
    This Class is responsible 
    """ 
    def __init__(self): 
     logger.debug('I will be called only after apache restart')   

    """ 
    WSGI module will call this function by default  
    """ 
    def __call__(self, environ, start_response): 
     logger.debug('I will be invoked for every request')  

     # Do some stuff here 
     start_response(response_state, response_header)   
     return [response] 

問題:我無法看到__init__內的日誌和app.py以外的日誌。應用程序 - - 輸出重新啓動Apache的

DEBUG後

第一次運行,我只包含一次

DEBUG - 應用程序 - 我只會之後阿帕奇重啓而被稱爲

調試 - 應用程序 - 我將爲每個請求調用

當我刷新瀏覽器

調試頁面 - 應用程序 - 我會被調用爲每個請求

這是怎麼回事?我知道__init__不是構造函數,應用程序對象是在某處緩存嗎?發生了什麼。

+0

只是指着,你注意到類名是應用程序,你正在實例化APP? – 2013-05-08 04:44:57

+0

謝謝@Bibhas,我已經更新 – Maddy 2013-05-08 04:47:32

回答

2

您的代碼甚至不符合記錄的消息。

忽略這一點,模塊在第一次加載時僅導入一次。

的__init __()被調用一次時:

application = mysite.app.APP() 

在進口時運行。然後__call __()在每個請求上運行。

所以是的,東西被緩存在一個進程內,並在隨後的請求中重用。

IOW,事情不會像PHP那樣在每個請求上重新加載。

所以不知道是什麼問題。

+0

謝謝,我剛剛更新了日誌,我是新來的python,不知道它將如何呈現。 – Maddy 2013-05-08 04:53:44