我正在尝试使用 Gunicorn 运行我的应用程序。但是,Flask 在 Gunicorn 启动时引发 OSError: [Errno 98] Address already in use
,然后 Gunicorn 关闭。如何使用 Gunicorn 提供应用程序?
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, World!'
app.run(debug=True)
gunicorn app:app
[2017-02-19 21:09:50 -0800] [21965] [INFO] Starting gunicorn 19.6.0
[2017-02-19 21:09:50 -0800] [21965] [INFO] Listening at: http://127.0.0.1:8000 (21965)
[2017-02-19 21:09:50 -0800] [21965] [INFO] Using worker: sync
[2017-02-19 21:09:50 -0800] [21968] [INFO] Booting worker with pid: 21968
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
[2017-02-19 21:09:50 -0800] [21969] [ERROR] Exception in worker process
Traceback (most recent call last):
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/gunicorn/arbiter.py", line 557, in spawn_worker
worker.init_process()
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/gunicorn/workers/base.py", line 126, in init_process
self.load_wsgi()
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/gunicorn/workers/base.py", line 136, in load_wsgi
self.wsgi = self.app.wsgi()
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
return self.load_wsgiapp()
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
return util.import_app(self.app_uri)
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/gunicorn/util.py", line 357, in import_app
__import__(module)
File "/home/david/Projects/py36/app.py", line 4, in <module>
app.run(debug=True)
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/flask/app.py", line 841, in run
run_simple(host, port, self, **options)
File "/home/david/.virtualenvs/py36/lib/python3.6/site-packages/werkzeug/serving.py", line 691, in run_simple
s.bind((hostname, port))
OSError: [Errno 98] Address already in use
[2017-02-19 21:09:50 -0800] [21968] [INFO] Worker exiting (pid: 21968)
[2017-02-19 21:09:50 -0800] [21965] [INFO] Shutting down: Master
[2017-02-19 21:09:50 -0800] [21965] [INFO] Reason: Worker failed to boot.
我试过了 gunicorn Connection in use for python flask和 error: [Errno 98] Address already in use但无法让它工作。
最佳答案
您正在使用 Gunicorn(或任何生产 WSGI 服务器),因此您不想使用 Flask 开发服务器。但是您正在无条件地调用 app.run
。 Gunicorn 启动,绑定(bind)地址,然后导入您的应用程序,它调用 app.run
并尝试启动自己的服务器。但该地址已被 Gunicorn 使用。
将 app.run
移动到保护 block 中:
if __name__ == '__main__':
app.run()
或者最好完全删除它,因为您应该使用 flask
命令来运行开发服务器,如 docs 中所述.
关于python - Flask 引发 `Address already in use` 与 Gunicorn 等 WSGI 服务器一起运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42324606/