微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 gunicorn 打开一个基于连接的 REST 服务

如何解决使用 gunicorn 打开一个基于连接的 REST 服务

我有一个使用 connexion 构建的 Flask 服务。服务在脚本 create_app() 中定义的函数 src/group/application/my_service/api/app.py 中初始化:

# app.py
def create_app():
   arguments = {"url": "0.0.0.0"}
   app = connexion.App(__name__,options={"swagger_ui": True})
   app.add_api("openapi-spec.yml",arguments=arguments,strict_validation=True)
   app.run(port=8080,debug=True)

src/group/application/my_service/__main__.py 中,我导入 create_app 并执行它:

# __main__.py
from group.application.my_service.api.app import create_app
create_app()

有了这个,我就可以用 python 成功打开服务了:

python -m src.group.application.my_service

我现在想改用 gunicorn。我正在尝试以下命令

gunicorn -w 1 -b 0.0.0.0:8080 'src.group.application.my_service.api.app:create_app()'

但我收到以下错误消息:

[2021-05-19 11:55:32 +0200] [13275] [INFO] Starting gunicorn 20.1.0
[2021-05-19 11:55:32 +0200] [13275] [INFO] Listening at: http://0.0.0.0:8080 (13275)
[2021-05-19 11:55:32 +0200] [13275] [INFO] Using worker: sync
[2021-05-19 11:55:32 +0200] [13276] [INFO] Booting worker with pid: 13276
 * Serving Flask app "src.group.application.my_service.api.app" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production Wsgi server instead.
 * Debug mode: on
2021-05-19 11:55:33,672 [CRITICAL] Traceback (most recent call last):
  File "/Users/user/repo_name/src/group/application/my_service/api/app.py",line 39,in create_app
    app.run(port=8080,debug=True)
  File "/Users/user/venvs/venv/lib/python3.9/site-packages/connexion/apps/flask_app.py",line 96,in run
    self.app.run(self.host,port=self.port,debug=self.debug,**options)
  File "/Users/user/venvs/venv/lib/python3.9/site-packages/flask/app.py",line 990,in run
    run_simple(host,port,self,**options)
  File "/Users/user/venvs/venv/lib/python3.9/site-packages/werkzeug/serving.py",line 1030,in run_simple
    s.bind(server_address)
OSError: [Errno 48] Address already in use

Failed to find application object: 'create_app()'
[2021-05-19 11:55:33 +0200] [13276] [INFO] Worker exiting (pid: 13276)
[2021-05-19 11:55:33 +0200] [13275] [INFO] Shutting down: Master
[2021-05-19 11:55:33 +0200] [13275] [INFO] Reason: App Failed to load.

如何使用 Gunicorn 成功打开服务,并且没有关于我在开发服务中这一事实的警告消息(这是我想使用 gunicorn 的根本原因)?

解决方法

事实证明函数creat_app()应该返回app而不是调用app.run()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?