Python 3.x Uvicorn未运行sanic“;在“服务器启动”之前;
我有一个sanic应用程序,如下所示:Python 3.x Uvicorn未运行sanic“;在“服务器启动”之前;,python-3.x,sanic,uvicorn,Python 3.x,Sanic,Uvicorn,我有一个sanic应用程序,如下所示: from functools import wraps import os from sanic import Sanic from sanic.response import json from es_api.client import ElasticEngine from utils import cleanup app = Sanic(__name__) async def setup_es_client(app, loop):
from functools import wraps
import os
from sanic import Sanic
from sanic.response import json
from es_api.client import ElasticEngine
from utils import cleanup
app = Sanic(__name__)
async def setup_es_client(app, loop):
app.es_client = ElasticEngine.from_bonsai("xkcd_production", test_instance=False)
@app.route("/", methods=["GET"])
async def home(request):
return json({"hello": "worldddd"})
@app.route("/all", methods=["GET"])
async def display_all_docs(request):
results = app.es_client.search_all().results()
return json(
{"results": results}
)
if __name__ == "__main__":
app.register_listener(setup_es_client,
'before_server_start')
app.run(host="0.0.0.0", port=8000, debug=True, workers=20)
当我运行uvicorn myapp时,它很好地服务于主页:我看到了预期的json
但是当我点击/all
,它会说
“应用程序没有属性es_客户端”
,这可能表示服务器启动之前的功能尚未运行
我该如何解决这个问题?我已经查阅了sanic文件,但找不到任何关于这个问题的参考资料
(当我按原样运行应用程序时,它工作正常——即,python3myapp.py
)已修复
移动app.register\u listener(设置\u es\u客户端、,
“在服务器启动之前”)
以上if\uuuuuuu name\uuuuuu==“\uuuuuuu main\uuuuu”
更好的是,只需使用sanic的内置装饰器即可实现更好的人体工程学: