根据我的理解,Apache mod_wsgi实现了一个与Apache一起运行并提供CGI请求的python解释器,但是WSGI和CGI之间的区别在于,只要Apache服务器正在运行,使用WSGI,Python会话就会一直运行,而每次服务器获取CGI请求时,都必须重新启动CGI。Python模块侦听来自Apache的WSGI请求?
我想知道的是,是否有一个Python模块可以与Apache分开运行,就像在交互式Python会话中那样,它将监听来自Apache的CGI请求?因此,例如,您可以让Apache运行并且WSGI中间件不运行,然后您可以启动交互式Python会话并导入您的WSGI中间件模块,然后它将提供来自Apache的CGI请求,您也可以关闭它,而无需关闭Apache。所以它是一个像Apache mod_wsgi这样的单一会话,但它不一定总是与Apache同时运行,并且您可以从交互式Python会话中运行它。
编辑1:
因此,举例来说,我有这个烧瓶应用,myapp.py:
from flask import Flask
app = Flask(__name__)
app.debug = True
app.apples = 0
@app.route('/')
def hello():
app.apples += 1
return 'blah: %d' % app.apples
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
而且我可以通过键入蟒蛇myapp.py运行它,但它开始了自己的网站服务器。相反,我希望Apache成为Web服务器,但我希望能够打开一个交互式python shell并键入from myapp import *
并让应用程序监听来自Apache的请求,并且由于我有我的交互式shell,所以我可以做像print app.apples
或app.apples = 50
或其他什么的东西。我在说我希望我的web应用程序与web服务器分开,并与python shell交互。
我的意思是与app.apples
说的是它是一个全局变量,就像访问次数为'/'
的点击次数一样,只要应用程序正在运行,它就会一直存在。
编辑2:
这是另一个例子。
myapp.py:
import web
def add_global_hook():
g = web.storage({"counter": 0})
def _wrapper(handler):
web.ctx.globals = g
return handler()
return _wrapper
class Hello:
def GET(self):
web.ctx.globals.counter += 1
return "<h1>Counter: %d</h1>" % web.ctx.globals.counter
urls = ("/", "Hello")
app = web.application(urls, globals())
app.add_processor(add_global_hook())
app.run()
在这里,我可以打开一个Python解释器,然后输入from myapp import *
,并启动Web服务器,但Web服务器正在运行时,我从使用交互式受阻贝壳。有没有办法以非阻塞的方式运行服务器,以便我可以使用交互式shell?
这将有助于如果你可以编辑,并解释为什么你想这一点 - 也许这将挑起一些好的想法。 – gahooa
这可能对于在出现问题时调试apache + wsgi设置很有用。另外,我可以在调试wsgi应用程序时看到一些用途,并且通常用于提供wsgi的repl。 – jhonkola
是的,我希望它能够进行调试,并且我想让Apache与交互式会话分开运行,所以我可以单独关闭Apache,但仍然有交互式会话 - 所以我可以进行修改或任何其他操作 - 然后启动Apache备份。 –