首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何利用员工提供超玉米服务?

如何利用员工提供超玉米服务?
EN

Stack Overflow用户
提问于 2021-10-27 12:46:34
回答 1查看 1.9K关注 0票数 2

我想用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

现在我需要从我的代码中做同样的事情。第一次尝试是:

代码语言:javascript
复制
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,但作为回应,我得到了:

代码语言:javascript
复制
Warning: The config `workers` has no affect when using serve
  warnings.warn("The config `workers` has no affect when using serve", Warning)

然后我将代码重写如下:

代码语言:javascript
复制
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一起使用)。

我是不是误解了医生的意思?我在这方面缺乏知识,所以请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2021-12-30 07:34:58

这方面没有现成的功能,尽管我可以看到文档是如何误导的。对于必须以不同的格式提供配置,我也做了同样的错误假设。这不是问题所在。

如果您将超级玉米作为一个独立的可执行文件运行,则支持多个工作进程,正如您刚才提到的那样。但在任何其他配置中都不支持它们。

如果您通过它的serve() API运行超级玉米,您的期望是您将实现流程管理。

如果您查看src/hyperhorn/run.py,您将看到Hyper玉米如何实现多个工作进程。您需要在代码中复制这一点。因此,您需要自己创建这些进程,然后在每个进程中设置它们的异步循环,而不是像config.workers = 9这样的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69738967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档