我想用main.py的超级玉米启动我的main.py应用程序。
我使用这个命令手动启动服务器:
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')但我还是收到了同样的警告。文档说:
..。可以通过为异步或三工人提供的serve函数编程地使用Hypercorn (请注意,异步服务可以与uvloop一起使用)。
我是不是误解了医生的意思?我在这方面缺乏知识,所以请帮帮我。
发布于 2021-12-30 07:34:58
这方面没有现成的功能,尽管我可以看到文档是如何误导的。对于必须以不同的格式提供配置,我也做了同样的错误假设。这不是问题所在。
如果您将超级玉米作为一个独立的可执行文件运行,则支持多个工作进程,正如您刚才提到的那样。但在任何其他配置中都不支持它们。
如果您通过它的serve() API运行超级玉米,您的期望是您将实现流程管理。
如果您查看src/hyperhorn/run.py,您将看到Hyper玉米如何实现多个工作进程。您需要在代码中复制这一点。因此,您需要自己创建这些进程,然后在每个进程中设置它们的异步循环,而不是像config.workers = 9这样的东西。
https://stackoverflow.com/questions/69738967
复制相似问题