我对Python和Python Web应用程序开发比较陌生。目前,我正在使用mod_wsgi在Python中创建一个hello world应用程序
这是我的配置。
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后第一次运行
调试-应用-仅包含一次
调试-应用-仅在apache重新启动后才会调用我
DEBUG-应用-每个请求都会被调用
当我在浏览器中刷新页面时
DEBUG-应用-每个请求都会被调用
怎么了?我知道
__init__
不是构造函数,应用程序对象正在缓存某处?发生了什么。 最佳答案
您的代码甚至与记录的消息都不匹配。
忽略这一点,模块在第一次加载时仅导入一次。
__init __()仅在以下情况下被调用一次:
application = mysite.app.APP()
在导入时运行。然后,对每个请求都运行__call __()。
是的,东西被缓存在一个进程中,并在后续请求中被重用。
IOW,不会在每个请求(如PHP)上重新加载内容。
所以不确定是什么问题。