【发布时间】:2021-10-27 12:46:34
【问题描述】:
我想使用 main.py 中的 hypercorn 启动我的 FastAPI 应用程序。
我使用这个命令手动启动服务器:
hypercorn --access-logformat "%(R)s %(s)s %(st)s %(D)s %({Header}o)s" --access-logfile - -b 0.0.0.0:8000 -w 9 app:app
现在我需要从我的代码中做同样的事情。第一次尝试是:
from hypercorn.config import Config
from hypercorn.asyncio import serve
from api.app import app # app = FastAPI()
config = Config()
config.bind = ['0.0.0.0:8000']
config.access_log_format = '%(R)s %(s)s %(st)s %(D)s %({Header}o)s'
config.accesslog = mainLog # mainLog = logging.getLogger('main')
config.loglevel = 'INFO'
asyncio.run(serve(app, config))
我尝试设置 config.workers = 9 ,但作为回应,我得到了:
Warning: The config `workers` has no affect when using serve
warnings.warn("The config `workers` has no affect when using serve", Warning)
然后我将我的代码重写为:
import logging
import asyncio
from hypercorn.config import Config
from hypercorn.asyncio import serve
from api.app import app
mainLog = logging.getLogger('main')
...
async def main(app, config):
await serve(app, config)
if __name__ == "__main__":
config = Config()
config.bind = ['0.0.0.0:8000']
config.access_log_format = "%(R)s %(s)s %(st)s %(D)s %({Header}o)s"
config.accesslog = mainLog
config.loglevel = 'INFO'
config.worker_class = 'asyncio'
config.workers = 9
try:
loop = asyncio.get_event_loop()
loop.run_until_complete(main(app, config))
except:
mainLog.exception('Fail to start server')
但我仍然收到同样的警告。 Documentation 说:
... 可以通过可用于 asyncio 或 trio Workers 的 serve 函数以编程方式使用 Hypercorn(注意 asyncio serve 可与 uvloop 一起使用)。
我误解了文档吗?我缺乏这方面的知识,所以请帮助我。
【问题讨论】:
标签: python python-asyncio hypercorn