我有一个python应用程序开发使用瓶框架。我的瓶子应用程序是web,它提供返回JSon数据的方法,所以不需要静态内容。我试图使用CherryPy服务器将其部署到生产中,这对于生产应用程序来说应该是健壮的。
我的web_api.py文件(我的瓶子应用程序)如下所示:
from bottle import Bottle, request
app = Bottle()
@app.get('/stuff')
def do_stuff():
'''
Method that does stuff.
'''
stuff = {'data': 'some data'}
# Return the environment info as Json data
return stuff我有一个server.py文件可以在CherryPy服务器上启动瓶子应用程序,如下所示:
from my_package.web_api import app
from cherrypy.wsgiserver import CherryPyWSGIServer
server = CherryPyWSGIServer(
('0.0.0.0', 80),
app,
server_name='My_App',
numthreads=30)
server.start()因此,当我使用以下命令运行服务器时:
python server.py我的服务器已成功启动,并按预期在端口80中开始侦听。然而,一旦我启动了我的web服务器,我就不能再停止它了。我尝试过Ctrl +C,它与开发服务器一起工作,但在这里没有效果。我启动服务器的方式正确吗?一旦它运行,我该如何阻止它?这是在CherryPy上启动瓶子应用程序的正确方式吗?
顺便说一下,我在Windows 8中运行python2.7。
发布于 2015-02-04 01:11:52
您的代码是正确的,您只需要添加一个try/catch语句:
from my_package.web_api import app
from cherrypy.wsgiserver import CherryPyWSGIServer
server = CherryPyWSGIServer(
('0.0.0.0', 80),
app,
server_name='My_App',
numthreads=30)
try:
server.start()
except KeyboardInterrupt:
server.stop()您可能还需要考虑使用wsgi-请求记录器或其他类似的方法进行日志记录。
这是在cherrypy中托管WSGI应用程序的三种替代方法:
import cherrypy as cp
from cherrypy.wsgiserver import CherryPyWSGIServer
from cherrypy.process.servers import ServerAdapter
from bottle import Bottle
app = Bottle()
@app.get('/stuff')
def do_stuff():
'''
Method that does stuff.
'''
stuff = {'data': 'some dataX'}
return stuff
def run_decoupled(app, host='0.0.0.0', port=8080, **config):
server = CherryPyWSGIServer((host, port), app, **config)
try:
server.start()
except KeyboardInterrupt:
server.stop()
def run_in_cp_tree(app, host='0.0.0.0', port=8080, **config):
cp.tree.graft(app, '/')
cp.config.update(config)
cp.config.update({
'server.socket_port': port,
'server.socket_host': host
})
cp.engine.signals.subscribe() # optional
cp.engine.start()
cp.engine.block()
def run_with_adapter(app, host='0.0.0.0', port=8080, config=None, **kwargs):
cp.server.unsubscribe()
bind_addr = (host, port)
cp.server = ServerAdapter(cp.engine,
CherryPyWSGIServer(bind_addr, app, **kwargs),
bind_addr).subscribe()
if config:
cp.config.update(config)
cp.engine.signals.subscribe() # optional
cp.engine.start()
cp.engine.block()run_in_cp_tree和run_with_adapter函数正在使用cherrypy引擎,这使得插件能够使用现成的自动重新加载、pidfile、守护、信号管理和一些更好的功能,以及创建自己的工具的可能性。
注意,还可以使用WSGIPathInfoDispatcher在CherryPyWSGIServer上附加多个wsgi应用程序。
发布于 2019-03-12 14:18:28
试图在2019年将任何WSGI服务器连接到我的BottlePy应用程序,结果都是相当棘手的(对像我这样的noobie )。我试着连接几个,大部分时间都花在了CherryPy上,这改变了他的语法。
对我来说,最简单的就是服务员https://waitress.readthedocs.io/en/latest/usage.html,在我知道如何在服务员身上使用它之后,我也在cherrypy中得到了它。所以:
CherryPy http://docs.cherrypy.org/en/latest/advanced.html?highlight=WSGi#host-a-foreign-wsgi-application-in-cherrypy
1)在导入后添加
import cherrypy as cp
app = bottle.Bottle()2) 将路线“@瓶”更改为"@app"
3)将其添加为主函数
cp.tree.graft(app, '/')
cp.server.start()女服务员
1)在导入后添加
import waitress
app = bottle.Bottle()2)将其添加为主函数
waitress.serve(app, listen='*:44100')( 3) 将路线“@瓶”改为"@app"
https://stackoverflow.com/questions/28307981
复制相似问题